2017-05-04 25 views
-1

我的需要是我有一个Long值,它代表自epoch以来的毫秒值。我希望找出当天和当天之间的天数差异。 我使用Java8的DAYS.between(inputDate, currentDate)找出由两个长纪元值表示的两个日期之间的差异

因为我已经使用LocalDateTime currentDate = LocalDateTime.now(); 但我面临的问题是,当我转换long值转换java8 LocalDateTime的的currentdate。当我使用

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()中使用long值有效获取java8日期?

+3

从您链接到页面:* Unix纪元(或Unix时间或POSIX时间或UNIX时间戳),是**的秒数**那已经从1970年1月1日起)*。 ofEpochMilli,正如其名称所示,预计**毫秒**。使用https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#ofEpochSecond-long- –

回答

3

你必须决定。或者,您的电话号码是“自开始以来的毫秒值”,正如您在问题中所述,或者是“自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)));