c # драйвер по умолчанию (без дополнительных настроек) сохраняет локальные даты как дату utc в базу данных (дата - смещение часового пояса), но читает обратно без каких-либо действий (то есть дата utc).
Из-за этого при загрузке datetime из базы данных вы получаете diff через 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);