web-dev-qa-db-ja.com

格納Java 8 LocalDate in mongoDB

Springブート1.5.4.RELEASEおよびMongoドライバー3.4.2を使用します。

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));

コンソールでの出力:

---- 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では正しくない理由と、この問題の解決方法。

10
Mehraj Malik

_Java.util.Date_のインスタンスとして dateオブジェクトが返す のmongo-Javaクライアント。

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

ここのドキュメント は、と述べています。公式のBSON仕様では、BSONの日付タイプをUTC日時として参照しています。そして、これがLocalDateTime属性がDBに保存される前にUTCタイムゾーンに変換された理由である可能性があります。

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

5
Naman

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のサポートがドライバーに追加されました。

2