减去日期时出现意外结果

时间:2010-11-08 02:07:02

标签: java datetime date

以下是代码,供您观看:

public static void main(String[] args) throws Exception {
    Calendar cal = Calendar.getInstance();
    cal.set(2010, Calendar.JULY, 10, 1, 0, 20);
    Date d1 = cal.getTime();
    Date d2 = new Date();
    int seconds = 22;
    d2.setTime(d1.getTime() - seconds*1000);
    SimpleDateFormat iso_format = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
    System.out.println(iso_format.format(d1) + " - " + seconds + "s = " + iso_format.format(d2));
}

输出:2010-07- 10 01:00:20 - 22s = 2010-07- 10 24:59:58

答案不应该是2010-07- 09 24:59:58?为什么它会循环回到同一天?有办法解决吗?

1 个答案:

答案 0 :(得分:3)

小时24(因为您使用'kk'格式化)被认为是第二天,即第10天。它相当于午夜。我使用'HH'来格式化小时,这会将第24小时显示为'00'。这对我来说更有意义,我相信更符合标准。

日期在00/24小时变化。如果你要从结果日期减去另一个小时,则日期将按预期变为第9小时。

另外,如果你想要真正的ISO时间格式'HH'比'kk'更好。

http://en.wikipedia.org/wiki/ISO_8601#Times