我的需要是我有一个Long值,它代表自纪元以来的毫秒值。我希望找出当天与当天之间的天数差异。
我正在使用Java8的DAYS.between(inputDate, currentDate)
对于currentDate,我使用了LocalDateTime currentDate = LocalDateTime.now();
但是我面临的问题是当我将long值转换为java8 LocalDateTime时。当我使用
LocalDate date = Instant.ofEpochMilli(1490372528)
.atZone(ZoneId.systemDefault())
.toLocalDate();
结果是
1970-01-18
,而当我在https://www.epochconverter.com/中输入相同的值时,它给出的是Fri, 24 Mar 2017 16:22:08 GMT
为什么会有这种差异?如何从DAYS.between()中使用的长值有效获取Java8日期?
最佳答案
你必须决定。如您在问题中所述,您的数字要么是“自纪元以来的毫秒数”,要么是如链接的网站上所述(并使用)的“自1970年1月1日起经过的秒数”。
如果确实是“距纪元毫秒”,则可以使用
System.out.println(Instant.ofEpochMilli(1490372528).until(Instant.now(), ChronoUnit.DAYS));
打印天数,顺便说一下,这不比Java 8之前的代码简单
System.out.println(TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis()-1490372528));
如果您的数字实际上是“自纪元以来的秒数”,则您的代码几乎没有更改
System.out.println(Instant.ofEpochSecond(1490372528).until(Instant.now(),ChronoUnit.DAYS));
相当于
System.out.println(ChronoUnit.DAYS.between(Instant.ofEpochSecond(1490372528),Instant.now()));
正如您明确提到的
DAYS.between
。它只会委托给上面使用的until
方法。等效的Java 8之前的代码会稍微复杂一些System.out.println(TimeUnit.MILLISECONDS.toDays(
System.currentTimeMillis()-TimeUnit.SECONDS.toMillis(1490372528)));