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

Come salvare correttamente la data?

il driver c# per impostazione predefinita (senza impostazioni aggiuntive) salva le date locali come data utc nel database (offset data - fuso orario) ma rilegge senza alcuna azione (quindi, data utc).

Per questo motivo, quando carichi datetime dal database, ricevi diff in 2 ore (offset del fuso orario). Esistono due approcci su come dire al driver mongodb c# di convertire le date utc in date del fuso orario locale durante la deserializzazione:

1.attraverso gli attributi per il campo data particolare:

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

2.attraverso le impostazioni globali per tutti i campi data/ora (l'impostazione predefinita è UtcInstance ):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

Una volta che avrai fatto #1 o #2 vedrai la data locale.

Aggiornamento:

#2 è obsoleto nell'ultima versione del driver, quindi usa il codice qui sotto:

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

Aggiornamento:

#2 è cambiato di nuovo:

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