C#-Treiber speichert standardmäßig (ohne zusätzliche Einstellungen) lokale Daten als UTC-Datum in der Datenbank (Datum - Zeitzonen-Offset), liest aber ohne Aktion zurück (also UTC-Datum).
Aus diesem Grund erhalten Sie beim Laden von datetime aus der Datenbank einen Unterschied in 2 Stunden (Ihr Zeitzonen-Offset). Es gibt zwei Ansätze, wie man sagen kann, dass der c#-Treiber von mongodb UTC-Daten während der Deserialisierung in Daten der lokalen Zeitzone konvertiert:
1.durch die Attribute für bestimmte Datumsfelder:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2.durch globale Einstellungen für alle datetime-Felder (Standard ist UtcInstance
):
DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
Sobald Sie #1 oder #2 gemacht haben, sehen Sie das lokale Datum.
Aktualisieren:
#2 ist in der neuesten Treiberversion veraltet, verwenden Sie stattdessen den folgenden Code:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
Aktualisieren:
#2 hat sich wieder geändert:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);