c# драйвер по подразбиране (без допълнителни настройки), запазващ местните дати като utc дата в базата данни (дата - отместване на часовата зона), но чете обратно без никакви действия (така, utc дата).
Поради това, когато зареждате дата и час от базата данни, получавате разлика в 2 часа (отместването на вашата часова зона). Има два подхода как да кажете на драйвера на mongodb c# да преобразува utc дати в дати от местната часова зона по време на десериализация:
1. чрез атрибутите за конкретно поле за дата:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2. чрез глобални настройки за всички полета за дата и час (по подразбиране е UtcInstance
):
DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
След като направите #1 или #2, ще видите местна дата.
Актуализация:
#2 е остарял в последната версия на драйвера, така че вместо това използвайте кода по-долу:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
Актуализация:
#2 се промени отново:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);