Java 确定文件期限(以天为单位)

Java 确定文件期限(以天为单位),java,Java,给定一个路径,我想根据上次修改的时间确定文件的时间。我知道如何获取上次修改的时间: FileTime t = Files.getLastModifiedTime(path); 我还知道如何通过以下方式获取当前日期/时间: LocalDate now = LocalDate.now(); 然而,我没有看到两者之间的任何联系。我想我必须从一种类型转换到另一种类型,然后在几天内计算差异,但此时我仍在阅读文档。非常感谢您的帮助。我不会使用LocalDate.now-这取决于您当前的时区。可以以时区无

给定一个路径,我想根据上次修改的时间确定文件的时间。我知道如何获取上次修改的时间:

FileTime t = Files.getLastModifiedTime(path);
我还知道如何通过以下方式获取当前日期/时间:

LocalDate now = LocalDate.now();
然而,我没有看到两者之间的任何联系。我想我必须从一种类型转换到另一种类型,然后在几天内计算差异,但此时我仍在阅读文档。非常感谢您的帮助。

我不会使用LocalDate.now-这取决于您当前的时区。可以以时区无关的方式计算文件的使用期限(以天数为单位)

相反,请通过toInstant将FileTime转换为Instant,然后您可以找到持续时间:

Instant fileInstant = t.toInstant();
Instant now = clock.instant(); // Where clock is a java.time.Clock, for testability
Duration difference = Duration.between(fileInstant, now);
long days = difference.toDays();
我不会使用LocalDate.now-这取决于您当前的时区。可以以时区无关的方式计算文件的使用期限(以天数为单位)

相反,请通过toInstant将FileTime转换为Instant,然后您可以找到持续时间:

Instant fileInstant = t.toInstant();
Instant now = clock.instant(); // Where clock is a java.time.Clock, for testability
Duration difference = Duration.between(fileInstant, now);
long days = difference.toDays();
您可以在中使用方法:

您可以在中使用方法:


请注意,通过使用System.currentTimeMillis,此代码比使用java.time.Clock的代码更难测试,java.time.Clock可以注入用于生产的系统时钟和用于测试的假时钟。仅仅因为此答案与Jon Skeet的答案竞争,并且他对测试有评论,并不意味着此答案是错误的。它实际上非常有用,因为您可以更改系统的日期并验证输出是否符合要求。Jon Skeet的答案是因为他的受欢迎而得到这么多的支持。请注意,通过使用System.currentTimeMillis,这段代码比使用java.time.Clock的代码更难测试,java.time.Clock可以注入用于生产的系统时钟和用于测试的假时钟。这只是因为这个答案与Jon Skeet和他对测试的评论并不意味着这个答案是错误的。它实际上非常有用,因为您可以更改系统的日期并验证输出是否符合要求。Jon Skeet的答案是因为他的受欢迎而获得这么多的支持票,而不是别的。愚蠢的问题:我如何创建java.time类型的对象。Clockt@HaiVu:查看显示返回时钟的各种静态方法的文档。我看到了,认为Clock.systemUTC将是理想的选择,我还读到了@HaiVu:如果你不依赖我们不在的时钟时区,那么systemUTC绝对可以。但我会使用依赖注入和控制反转,这样生产就可以使用它,而测试则使用一个假时钟。Clockt@HaiVu:查看显示返回时钟的各种静态方法的文档。我看到了,认为Clock.systemUTC将是理想的选择,我还读到了@HaiVu:如果你不依赖我们不在的时钟时区,那么systemUTC绝对可以。但我会使用依赖注入和控制反转,这样生产就可以使用它,而测试则使用假时钟。