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);