Springブート1.5.4.RELEASE
およびMongoドライバー3.4.2
を使用します。
LocalDate
をmongo 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));
コンソールでの出力:
---- StartDate:--- 2017-08-26
-----終了日:---- 2020-12-01
しかし、MongoDbでは、不正な日付を格納しています。
以下は、MongoDbのjsonです。
"startDate":ISODate( "2017-08-25T18:30:00.000Z")、
"endDate":ISODate( "2020-11-30T18:30:00.000Z")
また、保存されている時刻もインドの時刻では正しくないことに気づきました。
誰かがここで私を助けてくれますか?日付がコンソールでは正しいのにMongoDBでは正しくない理由と、この問題の解決方法。
_Java.util.Date
_のインスタンスとして dateオブジェクトが返す のmongo-Javaクライアント。
問題は、startDate
とendDate
の値を保存している間、そのtoString()
メソッドがJVMのデフォルトのタイムゾーンを使用して値を更新することである可能性があります。
ここのドキュメント は、と述べています。公式のBSON仕様では、BSONの日付タイプをUTC日時として参照しています。そして、これがLocalDateTime
属性がDBに保存される前にUTCタイムゾーンに変換された理由である可能性があります。
また、このような混乱を避けるために、bsonタイプ timestamp
を使用して日付フィールドを更新することをお勧めします。
MongoDBではJava Driver 3.7 release: http://mongodb.github.io/mongo-Java-driver/3.7/whats-new/ ドライバーがLocalDateをサポートするようになりました:
JSR-310 Instant、LocalDate、およびLocalDateTimeのサポートInstant、LocalDate、およびLocalDateTimeのサポートがドライバーに追加されました。