MongoDB中的IsoDate和DateTime使用c#
本文关键字:使用 DateTime 中的 IsoDate MongoDB | 更新日期: 2023-09-27 18:11:50
假设我想查询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-20 00: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
,它会做你所期望的。
(无耻的插头:我自己的项目,野田时间,使这一切变得更简单…)