【发布时间】:2017-11-15 18:06:12
【问题描述】:
我想计算 Java 中两个小时 (HH:mm:ss) 之间的时间差(持续时间)。在这里,我已经阅读了几个关于这个主题的主题,但我的问题有点不同。
我也无法使用Joda-Time。
示例:
input values: 12:03:00
00:00:00
expected output: 11:57:00
Сode:
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
String startTime = sc.next();
String endTime = sc.next();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Date d1 = sdf.parse(startTime);
Date d2 = sdf.parse(endTime);
long elapsed = d2.getTime() - d1.getTime();
String hms = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(elapsed),
TimeUnit.MILLISECONDS.toMinutes(elapsed) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(elapsed)),
TimeUnit.MILLISECONDS.toSeconds(elapsed) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(elapsed)));
if (elapsed > 0) {
System.out.println(hms);
} else {
elapsed = elapsed * (-1); //otherwise, print hours with '-'
String hms1 = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(elapsed),
TimeUnit.MILLISECONDS.toMinutes(elapsed) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(elapsed)),
TimeUnit.MILLISECONDS.toSeconds(elapsed) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(elapsed)));
System.out.println(hms1);
}
}
结果:
expected output: 11:57:00
actual output: 12:03:00 //that's the problem
【问题讨论】:
-
请格式化您的代码缩进,使其清晰易读。
-
"'我也不能使用 JodaTime :/" 你可以使用 Java 8 吗?
-
仅供参考,麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleTextFormat现在是 legacy,被 Java 8 及更高版本中的 java.time 类所取代。见Tutorial by Oracle。 -
亲爱的投票者:请在投票的同时留下批评。计算一天中的时间和一天结束之间经过的时间是一个合理的问题。
-
使用启用/模拟时间 24:00(一天结束时的午夜)并且还具有持续时间格式化功能的 API 时,您可以获得很多收益。使用我的库 Time4J 的简单示例,请参阅gist