sterownik c# domyślnie (bez dodatkowych ustawień) zapisuje daty lokalne jako datę utc do bazy danych (data - przesunięcie strefy czasowej), ale odczytuje wstecz bez żadnej akcji (czyli data utc).
Z tego powodu podczas ładowania daty i godziny z bazy danych otrzymujesz diff w ciągu 2 godzin (przesunięcie strefy czasowej). Istnieją dwa podejścia, jak powiedzieć, aby sterownik mongodb c# konwertował daty utc na daty lokalnej strefy czasowej podczas deserializacji:
1.poprzez atrybuty dla konkretnego pola daty:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2.poprzez ustawienia globalne dla wszystkich pól daty i godziny (domyślnie UtcInstance
):
DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
Gdy zrobisz #1 lub #2, zobaczysz lokalną datę.
Aktualizacja:
#2 jest przestarzały w najnowszej wersji sterownika, więc użyj poniższego kodu:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
Aktualizacja:
#2 zmienił się ponownie:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);