2013-12-08 73 views
2

我有一個DateTime字段的類。在mongodb上插入上一個日期

Class aClass 
{ 
    [BsonId] 
    public int Id { get; set; } 

    [BsonElement("dateCreated")] 
    public DateTime DateCreated { get; set; } 
} 

但是當我通過與日期C#驅動程序蒙戈插入bject假設DateCreated = new DateTime(2013, 12, 08)以前的日期被插入。

> db.col.find(); 
{ 
    "_id" : 1, 
    "dateCreated" : ISODate("2013-12-07T22:00:00Z") 
} 

我正在使用MongoDb 2.2.6

+0

請編輯您的問題,包括你正在使用MongoDB的版本。 – 4J41

+0

@Ajai我加了版本。 – Schaliasos

回答

1

MongoDB將所有DateTime值存儲爲UTC時間(BSON Date type is the UTC datetime)。這就是爲什麼你會在數據庫中看到UTC時間(你的本地時區有兩個小時偏移到UTC時間)。如果您保存UTC時間,它將按原樣存儲。檢查:

DateCreated = new DateTime(2013, 12, 8, 0, 0, 0, DateTimeKind.Utc) 

當您閱讀從數據庫這個值,他們也將有UTC時間(價值將12/7/2013 22:00:00,如果您要檢查日期Kind財產,這將是Utc)。但是你可以問蒙戈通過應用BsonDateTimeOptions屬性反序列化日起當地時區時間:

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

現在相同的日期將被反序列化是本地,它將具有價值12/8/2013 00:00:00。您可以通過設置默認序列化選項使相同的行爲給所有DateTime值反序列化:

DateTimeSerializationOptions.Defaults = 
    DateTimeSerializationOptions.LocalInstance; 
+1

謝謝,那是問題所在。 – Schaliasos

+0

你希望保持日期時間轉換出域嗎?我認爲個人領域模型更清潔。 – brumScouse