我目前正在编写一个应用程序,我需要检查是否有任何文件在昨天之前创建并清理它们。此刻,当我尝试以下:Java8和夏令时
LocalDateTime today = LocalDate.now().atStartOfDay();
long todayEpoch = today.atZone(ZoneId.of("Europe/London")).toEpochSecond() * 1000;
和转换毫秒回日期(在任何网上毫秒至今转换器),它告诉我,我1小时后面。
这是因为夏令时,这意味着我们是格林威治标准时间+ 1:00,这可能解释了1小时的差异。
为了解决这个问题,我不得不做改变区域ID为UTC如下:
final LocalDateTime today = LocalDate.now().atStartOfDay();
long todayEpoch = today.atZone(ZoneId.of("UTC")).toEpochSecond() * 1000;
但我仍然感到困惑它是如何工作的。
有人可以解释为什么吗?
你是如何得到文件创建日期的?如果这些文件是磁盘上的文件,为什么不使用'FileTime'对象,通过'Files.readAttributes(path,BasicFileAttributes.class).creationTime()'检索。从这里你得到一个'Instant',你可以用'Instant.now()。minusDays(1)'比较,没有涉及时区。 – Tunaki