【蓝桥杯】历届真题 时间显示(省赛)Java
【问题描述】
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从1970年1月1日O0:00:00到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
【输入格式】
输入一行包含一个整数,表示时间。
【输出格式】
输出时分秒表示的当前时间,格式形如HH:MM:SS,其中HH表示时,值为0到23,MM表示分,值为0到59,SS表示秒,值为0到59。时、分、秒不足两位时补前导0。
【样例输入1】
46800999
【样例输出1】
13:00:00
【样例输入2】
1618708103123
【样例输出2】
01:08:23
【评测用例规模与约定】
【思路与分析】
该题有两种方法可解:1. 使用Java自带的API进行计算、2. 通过计算毫秒数,将范围确定为一天内,并按照题意忽略毫秒位,计算出其所代表的时间。
总体来说此题还是较为简单的,方法一主要体现在对Date类及其实例化、时间的输出格式等方面。
而方法二则较为考察逻辑能力,如何获取到正确的数据范围、如何进行不足位补0的操作,能够有一个明确的思路的话,写代码还是很轻松的。
来吧,展示!
【代码:API】
import java.util.Scanner;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
long time = sc.nextLong();
//减8小时是因为Date以1970-01-01 08:00:00开始,比题目中要求的时间早8个小时
time -= 8 * 60 * 60 * 1000;
//格式化输出
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date(time)));
}
}
【代码:计算】
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
long time = sc.nextLong();
//分别计算“当天”的时、分、秒
long HH = time / 1000 / 60 / 60 % 24;
long MM = time / 1000 / 60 % 60;
long SS = time / 1000 % 60;
//通过可变字符串完成题意的不足位补0要求
StringBuilder sBuilder = new StringBuilder();
if(HH < 10){
sBuilder.append("0"+HH+":");
} else {
sBuilder.append(""+HH+":");
}
if(MM < 10){
sBuilder.append("0"+MM+":");
} else {
sBuilder.append(""+MM+":");
}
if(SS < 10){
sBuilder.append("0"+SS);
} else {
sBuilder.append(""+SS);
}
String str = sBuilder.toString();
System.out.println(str);
}
}
【总结】
此题还是比较简单的一道题,对思路的要求较低,主要的考察还是面向编程基础。对于API方法不够熟练的朋友也可以使用“暴力”法解出该题。