gpt4 book ai didi

Java8 和夏令时

转载 作者:行者123 更新时间:2023-12-01 09:48:50 25 4
gpt4 key购买 nike

我目前正在编写一个应用程序,我需要检查昨天之前是否创建了任何文件并清理它们。当我尝试以下操作时:

LocalDateTime today = LocalDate.now().atStartOfDay();
long todayEpoch = today.atZone(ZoneId.of("Europe/London")).toEpochSecond() * 1000;

并将毫秒转换回日期(在任何在线毫秒到日期转换器上),它告诉我我落后了 1 小时。

这是因为夏令时,这意味着我们现在是 GMT+1:00,这可能解释了 1 小时的差异。

为了解决这个问题,我必须将区域 ID 更改为 UTC,如下所示:

final LocalDateTime today = LocalDate.now().atStartOfDay();
long todayEpoch = today.atZone(ZoneId.of("UTC")).toEpochSecond() * 1000;

但我仍然很困惑它是如何工作的。

谁能解释一下为什么吗?

最佳答案

LocalDateTime today = LocalDate.now().atStartOfDay();

今天(以您所在的时区)00:00 返回。因此,如果今天是 2016 年 6 月 10 日,则会返回 2016-06-10 00:00

today.atZone(ZoneId.of("Europe/London"))

将时区信息添加到日期中,变为:2016-06-10 00:00 Europe/London,与 2016-06-09 23 同一时刻: 00 UTC,由于英国夏令时间。

然后,您检索纪元秒,即从 1970 年 1 月 1 日 00:00 UTC 到该时刻之间经过的秒数。

在第二个示例中,您计算​​纪元与 2016-06-10 01:00 Europe/London2016-06-10 00:00 UTC 之间的毫秒>.

您需要决定您想要哪个。

关于Java8 和夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com