2014-09-04 59 views
0

我正在使用java 8時間API將時間以毫秒爲單位轉換爲日期,並且從該日期開始出現錯誤的星期幾。 這裏是我的代碼 -來自java time API的錯誤日期

long millis = 1406865600000L; 
LocalDate localDate = LocalDate.ofEpochDay(millis/1000); 
DayOfWeek dow = localDate.getDayOfWeek(); 
System.out.println(dow); 

它打印在週四,而這是迄今爲止週五8月1日 請幫忙。

回答

2

LocalDate.ofEpochDay()預計天計數作爲它的參數,和你傳遞秒計數(這是你得到的將毫秒數由1000時)。

0

Answer by NPE是正確的。

解決方案的代碼示例

這裏是代碼正確處理這種情況。

如果您的輸入數字是1970年開始的時間以UTC爲單位的毫秒數,則創建一個Instant

Instant instant = Instant.ofEpochMilli(1406865600000L); 

確定日期需要時區。對於任何特定的時刻,日期因地區而異。例如,巴黎午夜過後的幾分鐘,法國是一個新的一天,而在魁北克蒙特利爾仍然是「昨天」。

因此,通過應用所需的/預期的時區,將Instant調整爲ZonedDateTime對象。

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = instant.atZone(z); 

詢問一週中的哪一天。 Java代表enum DayOfWeek中的每週七天中的每一天。

DayOfWeek dow = zdt.getDayOfWeek(); 

DayOfWeek對象的星期幾的名稱翻譯成在Locale定義的人類語言。

String output = dow.getDisplayName(TextStyle.FULL_STANDALONE , Locale.CANADA_FRENCH); 

轉儲到控制檯。結果,至少對America/Montreal而言,與您預期的一樣,即8月1日星期五。

System.out.println ("input: " + input + " | instant: " + instant + " | zdt: " + zdt + " | dow: " + dow + " | output: " + output); 

輸入:1406865600000 |即時:2014-08-01T04:00:00Z | zdt:2014-08-01T00:00-04:00 [America/Montreal] | dow:星期五|輸出:vendredi