我希望在Java中获得两个时间值之间的差异。以下是相同的代码段:
DateFormat sdf = new SimpleDateFormat("hh:mm");
Date date1 = sdf.parse("11:45");
Date date2 = sdf.parse("12:00");
System.out.println(""+(date2.getTime()-date1.getTime())/60000);
date1 = sdf.parse("12:45");
date2 = sdf.parse("13:00");
System.out.println(""+(date2.getTime()-date1.getTime())/60000);
date1 = sdf.parse("13:00");
date2 = sdf.parse("13:15");
System.out.println(""+(date2.getTime()-date1.getTime())/60000);
分别在所有三种情况下输出: 输出1:-705 输出2:735 OUTPUT3:15
我不明白为什么它会采取错误的价值,因为它在所有三种情况下应该是15。
答案 0 :(得分:3)
第一个也是最大的错误:
你使用12小时制(符号h),但符号H就可以了。
另一个更微妙的错误:
使用SimpleDateFormat
容易出错,因为它会隐式使用时区(结果可能会被Daylight Saving Time切换更改,请参阅夏令时Europe/London
的情况在1970年 - 你隐含的默认年份。)
因此我建议使用更现代的API。例如,java.time中包含Tutorial和Java SE 8类的内置LocalTime
包(ChronoUnit
)。
ChronoUnit.MINUTES.between(LocalTime.parse("11:45"), LocalTime.parse("12:00"))