2017-08-26 18 views
0

にJava 8 LocalDateを保存しています。春のブート1.5.4.RELEASEとMongoのドライバ3.4.2を使用しています。mongo DB

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では間違った日付が格納されています。

"たstartDate":

は、次のMongoDBからJSONでISODate( "2017-08-25T18:30:00.000Z")、

"endDateに":ISODate(「2020- 11-30T18:30:00.000Z ")

また、インドの時間に合わせて保存時間も間違っていることに気付きました。

誰かが私をここで助けてくれるのですか?コンソール上では日付は正しくありますが、MongoDBではなく、この問題を解決する方法はなぜですか?

+1

MongoDBはUTC datetimeを格納し、LocalDateはタイムゾーンを含まない – Jerry06

+0

Mongo Javaクライアントは、日付オブジェクトを自由に表現できます。文字列を格納する場合は、代わりに代わりに文字列を格納します。 –

+0

LocalDateは時間フィールドを無視します。それらは未定義です。時間が重要な場合は、LocalDate.atStartOfDayを使用してmongodbにdatetimeを格納してください。 – thst

答えて

2

java.util.Dateのインスタンスとしてdate object returnsのmongo-javaクライアント。

startDateendDateの値を保存している間に、そのtoString()メソッドは、おそらく値を更新するためにJVMのデフォルトのタイムゾーンを使用している可能性があります。

doc here公式のBSON仕様では、BSONの日付タイプをUTCの日時として参照しています。となり、LocalDateTime属性がDBに保存される前にUTCタイムゾーンに変換された可能性があります。

また、このような混乱を避けるには、bsonタイプtimestampを使用して日付フィールドを更新することをお勧めします。

+5

私は仕様書が前提に基づいてデータを破壊しないであろう日を夢見て、データをこのように保存するだけです。 Java 8が新しい日付形式で行ったように。 –