sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb c# driver og ISODate

I de fleste tilfælde vil du gemme UTC-dato-tider i databasen, så din DateTime bør være konstrueret som:-

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

Med dette består den første af dine kommenterede enhedstests nu.

Uden at angive DateTimeKind du overlader det til tilfældighederne. MongoDB ser ud til at antage, at det er lokalt og konverterer det til UTC i databasen.

Bemærk også, at MongoDB DateTime-værdier har mindre præcision end .NET DateTime-værdier. Hvis du vil gemme vilkårlige DateTime-værdier og få dem tilbage på en sådan måde, at de stadig stemmer overens, skal du afrunde dem til nærmeste millisekund, før du gemmer dem.

Hvis du virkelig ønsker at gemme lokale tider, anbefaler jeg, at du skifter fra DateTime til DateTimeOffset og serialiser det som en lang afkrydsningsværdi for UTC DateTime og en værdi for offset.

Bemærk, at medmindre du gemmer forskydningen beregnet på det tidspunkt, da DateTime-værdien blev opnået, så er .NET-metoderne til at konvertere til LocalTime i det væsentlige ubrugelige, da de ikke ved, hvornår sommertid startede, og de ved heller ikke, i hvilken zone DateTime-værdien kommer. fra. Samlet set lader .NET DateTime-håndtering meget tilbage at ønske og indeholder mange vildledende metoder, der hævder at hjælpe, men i virkeligheden ikke gør det.



  1. MongoDB Kan ikke kanonisere forespørgsel:BadValue For mange tekstudtryk

  2. Korrekt måde at håndtere skemaændringer i MongoDB med java-driver

  3. Hvordan konfigurerer jeg mongo til at køre i docker til at bruge et eksternt drev på Windows

  4. MongoDB Eksempel for Yesod / Vedvarende