【发布时间】:2020-03-03 17:34:11
【问题描述】:
我试图通过输入时间格式在 12 小时内计算 java 中的时差,当我输入开始时间11:58:10 pm 和结束时间12:02:15 am 时效果很好。但是当我进入上午 12:00:00 和下午 12:00:00 时,它会产生 0 分钟的差异。不知道为什么。以下是我的代码,请让我知道我错在哪里。
Scanner input = new Scanner(System.in);
System.out.print("Enter start time (HH:mm:ss aa): ");
String starttime = input.nextLine();
System.out.print("Enter end time (HH:mm:ss aa): ");
String endtime = input.nextLine();
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss aa");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(starttime);
d2 = format.parse(endtime);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
System.out.print(diffMinutes + " minutes and "+diffSeconds + " seconds.");
} catch (Exception e) {
System.out.println("Invalid fromat");
}
【问题讨论】:
-
HH 预计小时为 24 格式,而不是 12。
-
HH是 24 小时制,请改用hh。最好不要使用像Date和SimpleDateFormat这样的旧类。一方面,它们并非旨在代表挂钟时间。使用LocalTime和DateTimeFormatter -
我使用了 hh 格式但还是一样
-
必须是
Date和SimpleDateFormat吗?这些被认为是过时的,新代码应该使用LocalTime、DateTimeFormatter和Duration进行计算。 -
请使用
java.time。
标签: java time duration timeofday