MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pilote Mongodb c# et ISODate

Dans la plupart des cas, vous souhaitez stocker les heures de date UTC dans la base de données afin que votre DateTime soit construit comme :-

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

Avec cela, le premier de vos tests unitaires commentés réussit maintenant.

Sans spécifier le DateTimeKind vous le laissez au hasard. MongoDB semble supposer qu'il est local et le convertit en UTC dans la base de données.

Notez également que les valeurs MongoDB DateTime ont moins de précision que les valeurs .NET DateTime. Si vous souhaitez stocker des valeurs DateTime arbitraires et les récupérer de manière à ce qu'elles correspondent toujours, vous devrez les arrondir à la milliseconde la plus proche avant de les stocker.

Si vous voulez vraiment stocker les heures locales, je vous recommande de passer de DateTime à DateTimeOffset et sérialisez-le en tant que valeur Tick longue pour le DateTime UTC et une valeur pour le décalage.

Notez qu'à moins que vous ne stockiez le décalage calculé au moment où la valeur DateTime a été obtenue, les méthodes .NET pour convertir en LocalTime sont essentiellement inutiles car elles ne savent pas quand l'heure d'été a commencé, ni même de quelle zone vient la valeur DateTime. de. Dans l'ensemble, la gestion de .NET DateTime laisse beaucoup à désirer et contient de nombreuses méthodes trompeuses qui prétendent aider mais ne le font vraiment pas.