MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Driver Mongodb c# e ISODate

Nella maggior parte dei casi si desidera memorizzare le date e gli orari UTC nel database, quindi DateTime dovrebbe essere costruito come:-

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

Con questo ora passa il primo dei tuoi unit test commentati.

Senza specificare il DateTimeKind lo stai lasciando al caso. MongoDB sembra presumere che sia locale e lo converte in UTC nel database.

Si noti inoltre che i valori di MongoDB DateTime hanno una precisione inferiore rispetto ai valori di .NET DateTime. Se desideri archiviare valori DateTime arbitrari e recuperarli in modo tale che corrispondano ancora, dovrai arrotondarli al millisecondo più vicino prima di memorizzarli.

Se vuoi davvero memorizzare l'ora locale, ti consiglio di passare da DateTime a DateTimeOffset e serializzalo come un valore Tick lungo per DateTime UTC e un valore per l'offset.

Si noti che a meno che non si memorizzi l'offset calcolato nel momento in cui è stato ottenuto il valore DateTime, i metodi .NET per la conversione in LocalTime sono essenzialmente inutili poiché non sanno quando è iniziata l'ora legale, né sanno nemmeno in quale zona arriva il valore DateTime da. Nel complesso, la gestione di .NET DateTime lascia molto a desiderare e contiene molti metodi fuorvianti che affermano di essere d'aiuto ma in realtà non lo fanno.