В повечето случаи искате да съхранявате UTC дати в базата данни, така че вашият DateTime трябва да бъде конструиран като:-
DateTest = new DateTime(2013, 10, 13, 0, 0, 0, DateTimeKind.Utc) //this is the date
С това първият от вашите коментирани модулни тестове вече преминава.
Без да посочвате DateTimeKind
оставяте го на случайността. MongoDB изглежда приема, че е локален и го преобразува в UTC в базата данни.
Обърнете внимание също, че стойностите на MongoDB DateTime имат по-малка точност от стойностите на .NET DateTime. Ако искате да съхраните произволни стойности на DateTime и да ги получите обратно по такъв начин, че все още да съвпадат, тогава ще трябва да ги закръглите до най-близката милисекунда, преди да ги съхраните.
Ако наистина искате да съхранявате местно време, препоръчвам ви да преминете от DateTime
към DateTimeOffset
и го сериализирайте като дълга Tick стойност за UTC DateTime и стойност за отместването.
Обърнете внимание, че освен ако не съхраните отместването, изчислено по времето, когато е получена стойността на DateTime, тогава методите на .NET за преобразуване в LocalTime са по същество безполезни, тъй като те не знаят кога е започнало лятното часово време, нито дори знаят в коя зона идва стойността на DateTime от. Като цяло обработката на .NET DateTime оставя много да се желае и съдържа много подвеждащи методи, които твърдят, че помагат, но всъщност не са.