2014-02-18 118 views
1

我有一個模型,用一個日期字段表示一個mongo文檔。日期字段奇怪的行爲

class model 
{ 
    ... 

    [BsonElement("dateCreated")] 
    [BsonDateTimeOptions(Kind = DateTimeKind.Local)] 
    public DateTime DateCreated { get; set; } 

    ... 
} 

我知道蒙戈店在UTC時間值,所以我用BsonDateTimeOptions屬性在當地時間自動代表他們。

當我創建模型的實例並將其存儲到mongo時,它按預期工作。但是,當我從外部數據源(客戶端到我的服務)接收數據並將其刪除到我的模型時,它會存儲當地時間。

編譯器爲2個不同的實例顯示相同的值(在將它們插入到mongo之前),但在db中,第一個存儲在UTC,第二個存儲在本地時間。

+0

在插入它之前,請查看每個值的'Kind'屬性。 –

+0

我剛剛檢查過它。第一個對象具有'Kind = Unspecified'和反序列化的'Kind = Local'。 – Schaliasos

+0

不確定這裏「先」和「反序列化」是什麼意思,但這將是問題的根源。找出「未指定」版本的真正含義...... –

回答

0

我相信你需要在保存之前爲你的json解析數據分配一個Kind,無論是本地還是Utc。這將告訴mongo驅動程序它代表什麼,以便它在保存之前不會錯誤地轉換爲另一種格式。

someDate = DateTime.SpecifyKind(someDate, DateTimeKind.Utc)