2017-05-04 26 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)));