【发布时间】:2011-10-21 09:12:34
【问题描述】:
假设我想在 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
这是创建日期时间的代码(_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 说明。基本上这是一个时区问题,我怀疑......
标签: c# datetime mongodb mongodb-.net-driver