De reden is dat het BSON DateTime-formaat waarden opslaat met minder precisie dan een .NET DateTime-waarde, dus wanneer u het uit de database terugleest, is de waarde afgekapt.
Als uw DateTime-waarde een eigenschap is van een C#-klasse die u serialiseert, kunt u de serializer vragen om de DateTime-waarde te serialiseren als een ingesloten document dat zowel de BSON DateTime-waarde (afgekort) als de originele .NET DateTime-waarde (opgeslagen als Ticks) bevat. In dat geval wordt de waarde niet afgekapt bij het deserialiseren.
Bijvoorbeeld:
public class MyClass {
public ObjectId Id;
[BsonRepresentation(BsonType.Document)]
public DateTime MyDateTime;
}
U kunt ook een BsonRepresentation van Int64 of String gebruiken en de precisie niet verliezen, maar dan het opgeslagen document alleen heeft Ticks of een tekenreeksrepresentatie en geen BSON DateTime, wat het moeilijk maakt om DateTime-gerelateerde query's uit te voeren.
Houd er ook rekening mee dat DateTime-waarden worden opgeslagen in UTC in de database. Het beste is om altijd UTC-waarden te gebruiken voor opslag en alleen lokale tijden te gebruiken wanneer ze aan de gebruiker worden weergegeven.