MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb c#-Treiber und ISODate

In den meisten Fällen möchten Sie UTC-Datumszeiten in der Datenbank speichern, daher sollte Ihre DateTime wie folgt aufgebaut sein:-

DateTest = new DateTime(2013, 10, 13, 0, 0, 0, DateTimeKind.Utc) //this is the date

Damit besteht nun der erste Ihrer kommentierten Unit-Tests.

Ohne Angabe von DateTimeKind du überlässt es dem Zufall. MongoDB scheint davon auszugehen, dass es lokal ist, und konvertiert es in der Datenbank in UTC.

Beachten Sie auch, dass MongoDB-DateTime-Werte eine geringere Genauigkeit haben als .NET-DateTime-Werte. Wenn Sie beliebige DateTime-Werte speichern und so zurückgeben möchten, dass sie immer noch übereinstimmen, müssen Sie sie vor dem Speichern auf die nächste Millisekunde runden.

Wenn Sie wirklich lokale Zeiten speichern möchten, empfehle ich Ihnen, von DateTime zu wechseln zu DateTimeOffset und serialisieren Sie ihn als langen Tick-Wert für UTC DateTime und einen Wert für den Offset.

Beachten Sie, dass die .NET-Methoden zum Konvertieren in LocalTime im Wesentlichen nutzlos sind, wenn Sie den zum Zeitpunkt des Abrufens des DateTime-Werts berechneten Offset nicht speichern, da sie nicht wissen, wann die Sommerzeit begonnen hat, und sie wissen nicht einmal, aus welcher Zone der DateTime-Wert kommt aus. Insgesamt lässt die Handhabung von .NET DateTime zu wünschen übrig und enthält viele irreführende Methoden, die angeblich helfen, es aber nicht wirklich tun.