Ovladač c# ve výchozím nastavení (bez dalších nastavení) ukládá místní data jako datum utc do databáze (posun datum - časové pásmo), ale zpětné čtení bez jakékoli akce (takže datum utc).
Z tohoto důvodu při načítání datetime z databáze obdržíte rozdíl za 2 hodiny (posun vašeho časového pásma). Existují dva způsoby, jak říci, že ovladač mongodb c# během deseralizace převede data utc na data místního časového pásma:
1.přes atributy pro konkrétní pole data:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2.through globální nastavení pro všechna pole data a času (výchozí je UtcInstance
):
DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
Jakmile uděláte #1 nebo #2, uvidíte místní datum.
Aktualizace:
#2 je v nejnovější verzi ovladače zastaralý, takže místo něj použijte níže uvedený kód:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
Aktualizace:
#2 se opět změnilo:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);