时差给出了错误的价值

时间:2016-10-24 10:06:48

标签: java date datetime

我希望在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。

1 个答案:

答案 0 :(得分:3)

第一个也是最大的错误:

你使用12小时制(符号h),但符号H就可以了。

另一个更微妙的错误:

使用SimpleDateFormat容易出错,因为它会隐式使用时区(结果可能会被Daylight Saving Time切换更改,请参阅夏令时Europe/London的情况在1970年 - 你隐含的默认年份。)

因此我建议使用更现代的API。例如,java.time中包含TutorialJava SE 8类的内置LocalTime包(ChronoUnit)。

ChronoUnit.MINUTES.between(LocalTime.parse("11:45"), LocalTime.parse("12:00"))