/ / MongoDb BSON speichert Datum in UTC-Zeit - Java, Mongodb, Datum, Mongo-Java-Treiber

MongoDb BSON speichert Datum in UTC-Zeit - Java, Mongodb, Datum, Mongo-Java-Treiber

Wenn ich versuche, ein Datumsfeld in ein Dokument (BSON) einzufügen und es in Mongo zu schreiben, schreibt BSON es in UTC. Zum Beispiel ein Datum

DateTime dateTime = new DateTime("2015-07-01");
Document doc = new Document("date", dateTime.toDate());

wird gespeichert als

"date" : ISODate("2015-06-30T18:30:00Z")

in Mongo. Und wenn ich es mit demselben Java-Treiber abrufe, bekomme ich es als

Wed Jul 01 00:00:00 IST 2015

Großartig. Gibt es dafür keine Lösung? Ich meine, warum kann "ich mein Datum nicht so speichern, wie ich es möchte? Was muss ich tun, wenn ich eine andere Zeitzone auf der Datenbank abfragen muss? Ich erhalte unterschiedliche Ergebnisse?" Operatoren umwickelt. Warum bietet Mongo diese Flexibilität nicht? Vielen Dank

Antworten:

5 für die Antwort № 1

IMO, Mongo hat alles richtig gemacht. Sie instanziieren das Datum mit Ihrer lokalen Zeitzone und speichern es dann in Mongo in UTC. Und wenn Sie Mongo bitten, es für Sie abzurufen, wird das Datum erneut in Ihre lokale Zeitzone verschoben.

Wenn Sie sich nicht mit der Zeitzonenverschiebung befassen möchten, setzen Sie einfach Ihre lokale Zeitzone mit dem folgenden Flag auf UTC:

-Duser.timezone="UTC"

0 für die Antwort № 2

Beim Benutzen DateTime (von org.joda.time oder java.time) Ein Datum mit Zeitzone wird erstellt und MongoDB unterstützt dies leider nicht. (sehen BSON-Typen)

Daher ist das Bestehen in UTC eine einfache und zuverlässige Lösung ohne Datenverlust.

Als Alternative sollten Sie einen Blick darauf werfen LocalDateTime. Es enthält keine DateTimeZone und so muss zuerst nichts konvertiert werden.


0 für die Antwort № 3

Ich habe das Problem gelöst, indem ich meine Zeitzone im Code selbst als UTC festlegte.

    DateTimeZone zone = DateTimeZone.UTC;
DateTimeZone.setDefault(zone);