java - 减去日期时出现意外结果

标签 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吗?为什么会循环回到同一天?有办法解决吗?

最佳答案

24 点(因为您使用“kk”进行格式化)被视为第二天,即 10 号。相当于午夜。我使用“HH”来格式化小时,这会将第 24 小时显示为“00”。这对我来说更有意义,而且我相信更符合标准。

日期在 00/24 时更改。如果您从结果日期中再减去一个小时,该日期将成为预期的第 9 个日期。

此外,如果您想要真正的 ISO 时间格式,“HH”比“kk”更好。

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

关于java - 减去日期时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120808/

相关文章:

javascript - 日期格式插入数据库 + 4 小时

php - PHP 中的生日倒计时计算器

java - 如何更改当前日期

PHP 从字符串中解析日期

java - 如何从匿名内部类访问AbstractButton的方法?

java - JPanel 不使用 setSize 和 setPrefferedSize

java - 安卓:版本选择

java - ArrayAdapter 要求资源 ID 为 TextView

php - 计算出勤时间戳2

python - 名称 'now' 未定义?