第十二届蓝桥杯省赛 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));
}
}
运行结果截图如下: