Trình điều khiển c # theo mặc định (không có cài đặt bổ sung) lưu ngày cục bộ dưới dạng ngày utc vào cơ sở dữ liệu (ngày - chênh lệch múi giờ) nhưng đọc lại mà không có bất kỳ hành động nào (như vậy, ngày utc).
Bởi vì điều này khi bạn tải ngày giờ từ cơ sở dữ liệu, bạn nhận được chênh lệch trong 2 giờ (chênh lệch múi giờ của bạn). Có hai cách tiếp cận để nói với mongodb c # driver chuyển đổi ngày utc thành ngày múi giờ địa phương trong quá trình giải mã:
1. thông qua các thuộc tính cho trường ngày cụ thể:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2. thông qua cài đặt chung cho tất cả các trường ngày giờ (mặc định là UtcInstance
):
DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
Sau khi bạn thực hiện # 1 hoặc # 2, bạn sẽ thấy ngày địa phương.
Cập nhật:
# 2 đã lỗi thời trong phiên bản trình điều khiển mới nhất, vì vậy hãy sử dụng mã bên dưới để thay thế:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
Cập nhật:
# 2 đã thay đổi một lần nữa:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);