2017-08-26 239 views
0

使用Spring啓動1.5.4.RELEASE和Mongo驅動程序3.4.2在MongoDB中存儲java 8 LocalDate

我想存儲LocalDatemongo DB,但我面臨一個奇怪的問題。

 LocalDate startDate = LocalDate.now(); 
     LocalDate endDate = LocalDate.of(2020,12,01); 
     System.out.println("---- StartDate : ---"+startDate); 
     System.out.println("-----End Date : ----"+endDate); 

     repository.save(new Person("Mehraj","Malik", startDate, endDate)); 

輸出上的控制檯:

----開始日期:2017年8月26日---

-----結束日期:---- 2020-12 -01

但在MongoDb中它存儲的日期不正確。

以下是從MongoDB的JSON的:

「的startDate」:ISODate( 「2017-08-25T18:30:00.000Z」),

「結束日期」:ISODate(「2020- 11-30T18:30:00.000Z「)

此外,我已經注意到,根據印度時間儲存的時間也是不正確的。

有人可以幫我在這裏..爲什麼在控制檯上的日期是正確的,但不是在MongoDB中,以及如何解決這個問題。

+1

MongoDB存儲UTC日期時間,LocalDate不包含時區 – Jerry06

+0

Mongo Java客戶端可以自由地表示您的日期對象。如果要存儲字符串,則請改爲 –

+0

LocalDate忽略時間字段。他們沒有定義。如果時間很重要,請使用LocalDate.atStartOfDay並在mongodb中存儲日期時間 – thst

回答

2

date object returns的mongo-java客戶端作爲 java.util.Date的實例。

問題可能是,當您保存startDateendDate值時,其toString()方法可能會使用JVM的默認時區來更新該值。

doc here指出官方BSON規範將BSON日期類型引用爲UTC日期時間。這可能是您的LocalDateTime屬性在保存到數據庫之前轉換爲UTC時區的原因。

也爲了避免這種混淆,建議使用bson類型timestamp來更新日期字段。

+5

我夢想有一天,規範不會根據假設破壞數據,只是將數據存儲爲此。就像Java 8使用新的日期格式一樣。 –