当前时间为Sat Apr 04 15:02:00 AEST 2020
。
在下面的代码段中,我创建了一个Date对象,并向其添加86400000L毫秒(1天(:
Date date = new Date();
date.setTime(date.getTime() + 86400000L);
System.out.println(date);
输出为Sun Apr 05 14:02:00 AEST 2020
。我不明白为什么结果只增加了23小时,而不是24小时。
如有任何帮助,我们将不胜感激。
代码运行良好。输出中的AEST
表示日期与Australian Eastern Standard Time
有关。谷歌搜索AEST dst
显示,2020年4月5日星期日凌晨3点,时钟将"倒退"1小时。因此,在夏令时变更前增加24小时,只会使时间提前23小时。
如果你明天运行那个代码,你就不会有这个"问题"。
请使用现代java日期和时间API java.time来进行日期和时间工作。
ZonedDateTime currentTime = ZonedDateTime.now(ZoneId.of("Australia/Sydney"));
System.out.println(currentTime);
ZonedDateTime tomorrowSameTime = currentTime.plusDays(1);
System.out.println(tomorrowSameTime);
刚才运行时的输出:
2020-04-04T16:00:30.579484+11:00[Australia/Sydney] 2020-04-05T16:00:30.579484+10:00[Australia/Sydney]
请注意:我们明天的时间是16:00。由于夏令时间(夏令时(结束,明天的UTC偏移量不同,为+10:00,而不是+11:00。重要的是,虽然我发现+ 86400000L
几乎无法添加一天,但.plusDays(1)
非常清楚地传达了意图。
如果需要,请插入不同的东澳大利亚时区。
您的代码出了什么问题cherouvim在另一个答案中已经很好地解释了这一点,我不需要重复。请允许我补充一点,Date
类不仅设计得很糟糕——这会引起您的困惑——而且它已经过时很久了。我建议你不要使用它。正如cherouvim在评论中指出的那样,用日期编程很难。不要相信你自己可以将1天转换为8640000毫秒。将所有日期和时间计算留给经过验证的库方法。
链接:Oracle教程:日期时间解释如何使用java.Time.