比较FileTime和LocalDateTime

时间:2018-05-18 13:41:17

标签: java

如何在Java中比较FileTimeLocalDateTime个对象?

我想将文件(Files.getLastModifiedTime(item))中的FileTime对象与当前时间(LocalDateTime.now())进行比较。但它们并不兼容。我该如何比较它们?

4 个答案:

答案 0 :(得分:6)

FileTime API旨在鼓励您使用Instant而不是LocalDateTime

Instant now = Instant.now();
FileTime ft = Files.getLastModifiedTime(item);

if (ft.toInstant().isAfter(now)) { ... }

请注意,Instant在这种情况下比LocalDateTime更有意义,因为它代表了现实生活中的唯一即时“。而LocalDateTime可能不明确,例如在夏令时更改期间。

答案 1 :(得分:2)

您可以立即从FileTime获取并使用即时创建LocalDateTime对象。

实施例

FileTime fileTime = Files.getLastModifiedTime(item);
LocalDateTime now = LocalDateTime.now();
LocalDateTime convertedFileTime = LocalDateTime.ofInstant(fileTime.toInstant(), ZoneId.systemDefault());

现在你可以比较一下& convertedFileTime。

请记住,这并没有考虑到可以改变的时区。

您也可以使用Instant

答案 2 :(得分:0)

这些是不同的时间结构。您可以使用toInstant方法将它们转换为相同的类型。但是LocalDateTime需要时区。我想您只需要当前的系统时钟时间,因此您应该使用LocalDateTime.now()代替Clock.systemUTC().instant(),因此您不需要转换。

此外,如果将Clock注入代码中,从单元测试中模拟将更容易,而不是依赖于为您提供系统时间的静态方法。

答案 3 :(得分:0)

我在处理时间,日期,时区等方面的做法......我通常将这些对象转换为Unix时间戳,然后进行必要的操作。

long lastModifiedFileTime = Files.getLastModifiedTime(item).toMillis()/1000;
long now = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);

这样做会,但也许您应该考虑使用Instant而不是LocalDateTime,在处理时区时(根据您的c要求),内容会变得过于复杂。

long now = Instant.now().getEpochSecond();

您也可以使用即时对象

Instant now = Instant.now();
Instant lastModifiedFileTime = Files.getLastModifiedTime().toInstant();