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

Comment enregistrer la date correctement?

Pilote c# par défaut (sans paramètres supplémentaires) enregistrant les dates locales en tant que date utc dans la base de données (date - décalage de fuseau horaire) mais relisant sans aucune action (donc, date utc).

Pour cette raison, lorsque vous chargez datetime à partir de la base de données, vous recevez un diff en 2 heures (votre décalage de fuseau horaire). Il existe deux approches pour indiquer au pilote mongodb c# convertir les dates utc en dates de fuseau horaire local lors de la désérialisation :

1.via les attributs d'un champ de date particulier :

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}

2.via les paramètres globaux pour tous les champs datetime (la valeur par défaut est UtcInstance ):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

Une fois que vous aurez fait #1 ou #2, vous verrez la date locale.

Mise à jour :

#2 est obsolète dans la dernière version du pilote, utilisez donc le code ci-dessous :

BsonSerializer.RegisterSerializer(typeof(DateTime), 
             new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));

Mise à jour :

#2 a encore changé :

BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);