让我们假设我想在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,但没有找到任何理由为什么它应该被转移。可以吗?
答案 0 :(得分:12)
我认为问题在于DateTime.TryParse
给了DateTime
Kind
Local
...而ISO日期始终在UTC }。我希望MongoDB代码的某些部分将本地DateTime
转换为UTC中的一个。这主要是不是你的错 - 基本上是DateTime
is a very confusing type。
我怀疑如果你在解析代码中指定DateTimeStyles.AssumeUniversal
,它会做你期望的。
(无耻的插件:我自己的项目,Noda Time,使所有这一切变得更加简单......)