找出两个长纪元值表示的两个日期之间的差异

aay*_*v20 1 java epoch java-8 java-time localdate

我的需要是我有一个Long值,它代表自epoch以来的毫秒值.我希望了解当天和当天之间的天数差异.我正在使用Java8DAYS.between(inputDate, currentDate)

对于我使用的currentDate LocalDateTime currentDate = LocalDateTime.now(); 但是我面临的问题是当我将long值转换为java8 LocalDateTime时.我用的时候

LocalDate date = Instant.ofEpochMilli(1490372528)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();
Run Code Online (Sandbox Code Playgroud)

结果是1970-01-18当我在https://www.epochconverter.com/中输入相同的值时,它给出了Fri, 24 Mar 2017 16:22:08 GMT

为什么会出现这种差异?如何从长值中有效地获取java8日期以在DAYS.between()中使用?

Hol*_*ger 5

你必须决定.或者,正如您在问题中所述,您的号码是"自纪元以来的毫秒值",或者是"自1970年1月1日以来经过的秒数",如链接网站上所述(和使用).

如果它真的是"自纪元以来毫秒",你可以使用

System.out.println(Instant.ofEpochMilli(1490372528).until(Instant.now(), ChronoUnit.DAYS));
Run Code Online (Sandbox Code Playgroud)

打印天数,顺便说一句,这不比Java 8之前的代码简单

System.out.println(TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis()-1490372528));
Run Code Online (Sandbox Code Playgroud)

如果您的号码实际上是"自纪元以来的秒数",那么您的代码几乎没有变化

System.out.println(Instant.ofEpochSecond(1490372528).until(Instant.now(),ChronoUnit.DAYS));
Run Code Online (Sandbox Code Playgroud)

这相当于

System.out.println(ChronoUnit.DAYS.between(Instant.ofEpochSecond(1490372528),Instant.now()));
Run Code Online (Sandbox Code Playgroud)

如你DAYS.between明确提到的那样.它只会委托until上面使用的方法.等效的Java 8之前的代码会稍微复杂一些

System.out.println(TimeUnit.MILLISECONDS.toDays(
                       System.currentTimeMillis()-TimeUnit.SECONDS.toMillis(1490372528)));
Run Code Online (Sandbox Code Playgroud)