如何将LocalDateTime与文件的lastModified时间戳进行比较?

时间:2018-03-08 08:43:14

标签: java java-time

我想从修改日期早于午夜的本地文件夹中检索所有文件:

LocalDateTime midnight = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
long timestamp = file.lastModified();

问题:现在我已经在java.time.LocalDateTime开始了一天的工作,而且文件是' long中的时间戳。我现在如何检查timestamp > midnight

2 个答案:

答案 0 :(得分:0)

以下内容将LocalDateTime转换为时间戳记长:

long millis = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();

答案 1 :(得分:0)

据我了解您的问题,您想检查文件是否今天已被修改。以下代码可能比您自己的答案中的代码长一些,但我相信它更明确地表达了意图:

    long timestamp = file.lastModified();
    final ZoneId zone = ZoneId.of("Pacific/Nauru");
    LocalDate fileModifiedDate = Instant.ofEpochMilli(timestamp)
            .atZone(zone)
            .toLocalDate();
    LocalDate today = LocalDate.now(zone);
    if (! fileModifiedDate.isBefore(today)) { // timestamp >= midnight
        // do something
    }

我故意不使用fileModifiedDate.equals(today),它更直接地表达“文件今天被修改”。文件修改时间可能会在未来人为设置,因此对于大多数用途,我们希望坚持>=比较。你决定什么更适合你的目的。

如果您希望今天的日期在JVM的时区,那么在答案中使用ZoneId.systemDefault()是正确的,您也可以在此处执行此操作。只需知道JVM的时区设置可以随时由程序的其他部分或在同一JVM中运行的其他程序进行更改。