Der Grund dafür ist, dass das BSON-DateTime-Format Werte mit geringerer Genauigkeit speichert als ein .NET-DateTime-Wert, sodass der Wert beim Zurücklesen aus der Datenbank abgeschnitten wurde.
Wenn Ihr DateTime-Wert eine Eigenschaft einer C#-Klasse ist, die Sie serialisieren, können Sie den Serializer auffordern, den DateTime-Wert als eingebettetes Dokument zu serialisieren, das sowohl den BSON-DateTime-Wert (abgeschnitten) als auch den ursprünglichen .NET-DateTime-Wert (als Ticks gespeichert) enthält. In diesem Fall wird der Wert bei der Deserialisierung nicht abgeschnitten.
Zum Beispiel:
public class MyClass {
public ObjectId Id;
[BsonRepresentation(BsonType.Document)]
public DateTime MyDateTime;
}
Sie können auch eine BsonRepresentation von Int64 oder String verwenden und die Genauigkeit nicht verlieren, aber dann das gespeicherte Dokument nur hat Ticks oder eine String-Darstellung und kein BSON DateTime, was es schwierig macht, DateTime-bezogene Abfragen durchzuführen.
Denken Sie auch daran, dass DateTime-Werte in UTC in der Datenbank gespeichert werden. Es empfiehlt sich, immer UTC-Werte für die Speicherung zu verwenden und nur lokale Zeiten zu verwenden, wenn sie dem Benutzer angezeigt werden.