P5707题解
没有人发Java题解,那么我首当其冲来给大家发一个Java的题解。
首先我们要知道,用于操控时间的除了最常用的 Date 类,还有
- 方便日期运算的 Calendar 类,
- 拥有许多国家标准时间的 GregorianCalendar 类( Calendar 子类)。
这么一看,这道题使用起来比较方便的就是 Calendar 类。
Calendar 类中用一下这些常量表示不同的意义,jdk 内的很多类其实都是采用的这种思想。
- Calendar.YEAR ——年份 。
- Calendar.MONTH ——月份 。
- Calendar.DATE ——日期 。
- Calendar.DAY_OFMONTH ——日期,和上面的字段意义相同_ 。
- Calendar.HOUR ——12小时制的小时 。
- Calendar.HOUR_OFDAY ——24小时制的小时_ 。
- Calendar.MINUTE ——分钟 。
- Calendar.SECOND ——秒 。
- Calendar.DAY_OFWEEK ——星期几_。
用于操作时间:
Calendar c1 = Calendar.getInstance();
c1.add(Calendar.DATE, 10);
c1.add(Calendar.DATE, -10); //把c1对象的日期加上-10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算。
其他字段属性的add的意义以此类推。
这样一来,其他题解中说的那些坑也就减少了很多。比如说就不用考虑天数的问题了,Java自己帮你处理了。
还是以往的套路,相对于其他语言来说稍微麻烦一点点的,使用 Scanner 的对象进行输入。使用 Scanner 类时需要
Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt(); //路程。
int y = scanner.nextInt(); //速度。
之后再用 Calendar类 实例进行实践操作。
Calendar date = Calendar.getInstance(); //创造 Calendar 类实例。
date.set(2021, Calendar.MAY, 5, 8, 0, 0); //设置时间(不设置默认为计算机当前时间。)
上面那一句对应 Calendar 类中函数 。
public final void set(int year, int month, int date, int hourOfDay, int minute,int second)
date.add(Calendar.MINUTE, s % y == 0 ? -(s / y) : -(s / y) - 1); // 使用三目运算符。因为如果路程不能整除速度的话需要再使用一分钟填满。
之后再使用 SimpleDateFormat 进行时间格式化再输出。
- yyyy:年。
- MM:月。
- dd:日 。
- hh:1~12 小时制 (1-12)。
- HH:24 小时制 (0-23)。
- mm:分。
- ss:秒。
- S:毫秒。
- E:星期几。
- D:一年中的第几天。
- F:一月中的第几个星期(会把这个月总共过的天数除以 7)。
- w:一年中的第几个星期。
- W:一月中的第几星期(会根据实际情况来算)。
- a:上下午标识。
- k:和HH差不多,表示一天 24 小时制 (1-24)。
- K:和hh差不多,表示一天 12 小时制 (0-11)。
- z:表示时区。
这里只需要输出 小时:分钟,所以格式化的格式为:HH:mm
SimpleDateFormat format = new SimpleDateFormat("HH:mm"); //创造格式化 HH:mm 的 SimpleDateFormat 对象。
最后在输出的时候要将 Calendar 类转换为长整型输出,否则会报错。
而日期类都可以转换成长整型( long )格式,所以:
System.out.println(format.format(date.getTime())); // getTime()获得长整形时间
完整代码
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt();
int y = scanner.nextInt();
Calendar date = Calendar.getInstance();
date.set(2021, Calendar.MAY, 5, 8, 0, 0);
date.add(Calendar.MINUTE, -10);
date.add(Calendar.MINUTE, s % y == 0 ? -(s / y) : -(s / y) - 1);
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
System.out.println(format.format(date.getTime()));
}
}
希望大家有所收获 ~φ(≧ω≦*)♪ 。