デフォルトでは(追加設定なしで)c#ドライバーは、ローカル日付をutc日付としてデータベースに保存します(日付-タイムゾーンオフセット)が、アクションなしで読み戻します(つまり、utc日付)。
このため、データベースから日時をロードすると、2時間で差分が返されます(タイムゾーンオフセット)。逆シリアル化中に、mongodb c#ドライバーがUTC日付をローカルタイムゾーン日付に変換するように言うには、2つのアプローチがあります。
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);