以下是代码,供您观看:
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?为什么它会循环回到同一天?有办法解决吗?
答案 0 :(得分:3)
小时24(因为您使用'kk'格式化)被认为是第二天,即第10天。它相当于午夜。我使用'HH'来格式化小时,这会将第24小时显示为'00'。这对我来说更有意义,我相信更符合标准。
日期在00/24小时变化。如果你要从结果日期减去另一个小时,则日期将按预期变为第9小时。
另外,如果你想要真正的ISO时间格式'HH'比'kk'更好。