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.