第十二届蓝桥杯省赛 Java 大学 B 组—时间显示


一、解题思路
1、解法一( Java )
解法思路:模拟
☝res int 型不能满足所有评测用例,应该定义为 long 型
☝rem 是东八区时间 8 个小时的偏移量毫秒数
☝SimpleDateFormat("HH:mm:ss")时间输出格式(注意分钟对应是小写的 mm ,是为了区分月份对应大写的 MM )
Date date2 = new Date(0);
System.out.println(date2);
//输出结果是Thu Jan 01 08:00:00 CST 1970
伪代码如下:
/**
* @author Listen 1024
* @description 第十二届蓝桥杯省赛 Java 大学 B 组—时间显示—满分题解
* @date 2022-3-28 16:10:29
*/
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) {
long rem = 8 * 60 * 60 * 1000;//定义偏移量
Scanner scanner = new Scanner(System.in);
long res = scanner.nextLong();// 获取经过的毫秒数
Date date = new Date(res - rem);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");//定义输出格式
String string = sdf.format(date);
System.out.println(string);
scanner.close();
}
}
1、解法二( Java )
解法思路:模拟
☝res int 型不能满足所有评测用例,应该定义为 long 型
☝rem 是东八区时间 8 个小时的偏移量毫秒数
☝setTime() 设置时间(减去时间偏移量 rem )
☝toString() Date类重写了 toString() 方法,输出格式是EEE MMM dd HH:mm:ss zzz yyyy (举个栗子:毫秒数 67567567567 对应的具体时间是 Tue Feb 22 00:46:07 CST 1972),所以需要使用 subString() 方法截取指定 11 - 19部分输出(空格算一个字符)
☝substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
伪代码如下:
/**
* @author Listen 1024
* @description 第十二届蓝桥杯省赛 Java 大学 B 组—时间显示—满分题解
* @date 2022-3-28 16:10:29
*/
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long rem = 8 * 60 * 60 * 1000;
long res = scanner.nextLong();
Date date = new Date();
date.setTime(res - rem);
System.out.println(date.toString().substring(11, 19));
}
}
运行结果截图如下:

本文提供两种Java实现方案解决蓝桥杯大赛中关于时间显示的问题,通过模拟方式调整东八区时间偏移,利用Java内置类如SimpleDateFormat和Date实现精确的时间格式输出。

被折叠的 条评论
为什么被折叠?



