2017-03-17 255 views
0

我在將Java8 Date API值保存到MongoDB數據庫時遇到問題。每當一個新的LocalDate實例(LocalDate.now())被保存時,結果我們在昨天的日期和時間被設置爲23:00 PM時獲得價值。 例子:Spring Data MongoDB - 當保存LocaDate/LocalDateTime時,該值設置爲昨天

dt.getDate().toString() 

是給我的「2017年3月17日」

但是當我看着數據庫中我有這樣一個值:

"dt" : ISODate("2017-03-16T23:00:00.000Z") 

我的時區是UTC +01:00

回答

0

MongoDB以UTC時間保存日期。

LocalTime是您的掛鐘時間。

當您將它傳遞給MongoDb時,spring會使用您的系統區將LocalTime轉換爲Instant(UTC時間)。

考慮

LocalDateTime localDateTime = LocalDateTime.parse("2017-03-17T00:00:00") 

像這樣的事情happpens

Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); 

這是你的本地時間是通過將偏移(+01:00)變更爲UTC瞬間從您的本​​地時間。

Output(in UTC) : 2017-03-16T23:00:00.000Z