sql >> Database >  >> NoSQL >> MongoDB

Mongodb c#-stuurprogramma en ISODate

In de meeste gevallen wilt u UTC-datumtijden in de database opslaan, zodat uw DateTime moet worden opgebouwd als:-

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

Hiermee is de eerste van je becommentarieerde eenheidstests nu geslaagd.

Zonder de DateTimeKind . op te geven je laat het aan het toeval over. MongoDB lijkt aan te nemen dat het lokaal is en converteert het naar UTC in de database.

Merk ook op dat MongoDB DateTime-waarden minder nauwkeurig zijn dan .NET DateTime-waarden. Als u willekeurige DateTime-waarden wilt opslaan en ze zo terug wilt krijgen dat ze nog steeds overeenkomen, moet u ze afronden op de dichtstbijzijnde milliseconde voordat u ze opslaat.

Als je echt lokale tijden wilt opslaan, raad ik je aan over te stappen van DateTime naar DateTimeOffset en serialiseer het als een lange Tick-waarde voor de UTC DateTime en een waarde voor de offset.

Houd er rekening mee dat, tenzij u de offset opslaat die is berekend op het moment dat de DateTime-waarde werd verkregen, de .NET-methoden om naar LocalTime te converteren in wezen nutteloos zijn, omdat ze niet weten wanneer de zomertijd is begonnen, noch weten ze zelfs in welke zone de DateTime-waarde komt van. Over het algemeen laat de afhandeling van .NET DateTime veel te wensen over en bevat het veel misleidende methoden die beweren te helpen, maar dat in werkelijkheid niet doen.



  1. Redis is geconfigureerd om RDB-snapshots op te slaan, maar kan momenteel niet op schijf blijven staan ​​- Ubuntu Server

  2. Een Twitter-achtige tijdlijn maken met MongoDB

  3. Spring Data MongoDB Annotatie @CreatedDate werkt niet, wanneer ID handmatig wordt toegewezen

  4. Mongo db - Opvragen van geneste arrays en objecten