/ / MongoDb BSON ukladá dátum v čase UTC - java, mongodb, dátum, ovládač mongo-java

MongoDb BSON ukladá dátum v čase UTC - java, mongodb, dátum, mongo-java-driver

Ak sa pokúsim vložiť dátumové pole do dokumentu (BSON) a napísať ho do Mongo, BSON ho zapíše do UTC. Napríklad dátum

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

budú uložené ako

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

v Mongo. A ak ju stiahnem pomocou rovnakého ovládača Java, dostanem to ako

Wed Jul 01 00:00:00 IST 2015

Skvelé. Neexistuje riešenie? Prečo chcem uložiť svoje dátumy, ako to chcem? Čo keď potrebujem dotaz na DB z iného časového pásma? Dostanem rôzne výsledky? Dátumové pole je dôležitou súčasťou Monga s bohatou sadou operátori sú omotaní okolo. Prečo však Mongol neposkytuje túto flexibilitu? Vďaka

odpovede:

5 pre odpoveď č. 1

IMO, mongo urobilo všetko správne. Okamžitý dátum vytvoríte pomocou miestneho časového pásma a potom ho uložíte v mongo v UTC. A potom, keď požiadate Mongo, aby ho pre vás získalo, presunie opäť dátum do miestneho časového pásma.

Ak sa nechcete zaoberať posunom časového pásma, jednoducho nastavte miestne časové pásmo na UTC pomocou tohto príznaku:

-Duser.timezone="UTC"

0 pre odpoveď č. 2

Pri použití DateTime (od org.joda.time alebo java.time) sa vytvorí dátum s časovým pásmom a MongoDB ho, žiaľ, nepodporuje. (pozri Typy BSON)

Preto jej pretrvávanie v UTC je ľahké a spoľahlivé riešenie bez straty akýchkoľvek údajov.

Ako alternatívu by ste sa mali pozrieť LocalDateTime, Neobsahuje č DateTimeZone a preto nie je potrebné najprv konvertovať nič.


0 pre odpoveď č. 3

Mám problém vyriešený nastavením môjho časového pásma ako UTC zvnútra samotného kódu.

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