以下是代码,供您观看:
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”更好。
关于java - 减去日期时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120808/