[英]IsoDate and DateTime in MongoDB using C#
讓我們假設我想在dateTime上查詢mongo。 我有兩個C#變量代表開始和結束日期。
1){20.10.2011 00:00:00}
2){22.10.2011 00:00:00}
現在,BsonDateTime.Create(dateTime)也將它們轉換為BSON DateTime:
1)2011-10-20T00:00:00 MongoDB.Bson.BsonDateTime
2)2011-10-22T00:00:00 MongoDB.Bson.BsonDateTime
這是創建dateTimes的代碼(_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但沒有找到任何理由為什么它應該被轉移。 可以嗎?
我相信問題是DateTime.TryParse
給你一個DateTime
與Kind
Local
...而ISO日期總是在UTC 。 我希望MongoDB代碼的某些部分將本地DateTime
轉換為UTC中的一個。 這在很大程度上不是你的錯 - 基本上, DateTime
是一個非常令人困惑的類型 。
我懷疑如果你在解析代碼中指定DateTimeStyles.AssumeUniversal
,它會做你期望的。
(無恥的插件:我自己的項目, Noda Time ,讓這一切變得更加簡單......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.