Ve většině případů chcete v databázi uložit datum a čas UTC, takže váš DateTime by měl být konstruován jako:-
DateTest = new DateTime(2013, 10, 13, 0, 0, 0, DateTimeKind.Utc) //this is the date
Tímto nyní prošel první z vašich komentovaných testů jednotek.
Bez zadání DateTimeKind
necháváš to náhodě. Zdá se, že MongoDB předpokládá, že je lokální, a v databázi jej převede na UTC.
Všimněte si také, že hodnoty MongoDB DateTime mají menší přesnost než hodnoty .NET DateTime. Pokud chcete uložit libovolné hodnoty DateTime a získat je zpět tak, aby se stále shodovaly, budete je muset před uložením zaokrouhlit na nejbližší milisekundu.
Pokud opravdu chcete ukládat místní časy, doporučuji přepnout z DateTime
na DateTimeOffset
a serializovat jej jako dlouhou hodnotu Tick pro UTC DateTime a hodnotu pro offset.
Všimněte si, že pokud neuložíte offset vypočítaný v době, kdy byla získána hodnota DateTime, pak jsou metody .NET pro převod na LocalTime v podstatě k ničemu, protože nevědí, kdy začal letní čas, ani nevědí, v jaké zóně hodnota DateTime přichází. z. Celkově zpracování .NET DateTime ponechává mnoho přání a obsahuje mnoho zavádějících metod, které tvrdí, že pomáhají, ale ve skutečnosti ne.