sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb c#-drivrutin och ISODate

I de flesta fall vill du lagra UTC-datumtider i databasen så din DateTime bör vara konstruerad som:-

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

Med detta klarar nu det första av dina kommenterade enhetstester.

Utan att ange DateTimeKind du lämnar det åt slumpen. MongoDB verkar anta att det är lokalt och konverterar det till UTC i databasen.

Observera också att MongoDB DateTime-värden har mindre precision än .NET DateTime-värden. Om du vill lagra godtyckliga DateTime-värden och få tillbaka dem på ett sådant sätt att de fortfarande matchar, måste du avrunda dem till närmaste millisekund innan du lagrar dem.

Om du verkligen vill lagra lokala tider rekommenderar jag att du byter från DateTime till DateTimeOffset och serialisera det som ett långt Tick-värde för UTC DateTime och ett värde för offset.

Observera att om du inte lagrar förskjutningen som beräknades vid den tidpunkt då DateTime-värdet erhölls, så är .NET-metoderna för att konvertera till LocalTime i princip värdelösa eftersom de inte vet när sommartid började, och de vet inte ens i vilken zon DateTime-värdet kommer. från. Sammantaget lämnar .NET DateTime-hantering mycket övrigt att önska och innehåller många vilseledande metoder som påstår sig hjälpa men som verkligen inte gör det.



  1. Ny på MongoDB Kan inte köra kommandot mongo

  2. MongoDB-schema för att lagra användarens platshistorik

  3. Slumpmässigt urval från MongoDB ger kraftigt skeva resultat

  4. Hur förhindrar man _t och _v när man infogar i MongoDB?