讓我們假設我想在dateTime上查詢mongo。我有兩個代表開始和結束日期的C#變量。使用C#在MongoDB中的IsoDate和DateTime
1){20.10.2011 00:00:00}
2){22.10.2011 00:00:00}
現在BsonDateTime.Create(日期時間)它們轉化爲BSON日期時間也很好:
1)2011-10-20T00:00:00 MongoDB.Bson.BsonDateTime
2)2011-10-22T00:00:00 MongoDB.Bson.BsonDateTime
這是代碼創建dateTi MES(_value是一個字符串):
DateTime dateTime;
bool parsed = DateTime.TryParse(_value, out dateTime);
if (!parsed)
throw new FormatException("Wrong format for a query param");
return BsonDateTime.Create(dateTime);
那麼接下來的代碼生成查詢:
private QueryComplete MakeQuery(string key, BsonValue value)
{
if (_separatorType == ">=")
return Query.GTE(key, value);
if (_separatorType == "<=")
return Query.LTE(key, value);
return Query.EQ(key, value);
}
而且我在查詢中得到這樣一個奇怪的值:
"Sessions.End" : { "$gte" : ISODate("2011-10-19T21:00:00Z"), "$lte" : ISODate("2011-10-21T21:00:00Z") },
好,我谷歌ISODate,但沒有找到任何理由爲什麼它應該轉移。可以嗎?
你說你有兩個C#的變量,但沒有表現出他們是如何初始化,甚至什麼鍵入它們。我強烈懷疑這是事情的核心,但我們無法看到代碼就無法分辨。我的猜測是你已經創建了* local * DateTime值而不是UTC。 –
@Jon Skeet,添加了dateTime創建的代碼,什麼是UTC? –
查看我的答案 - 按照UTC的說明進行操作。基本上這是一個時區問題,我懷疑... –