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,但没有找到任何理由为什么它应该被转移。可以吗?

MongoDB中的IsoDate和DateTime使用c#

我认为问题是DateTime.TryParse给你一个DateTimeKindLocal…而ISO日期总是在UTC。我希望MongoDB代码的某些部分将本地DateTime转换为UTC中的一个。这在很大程度上不是你的错——基本上,DateTime是一个非常令人困惑的类型。

我怀疑如果你在你的解析代码中指定DateTimeStyles.AssumeUniversal,它会做你所期望的。

(无耻的插头:我自己的项目,野田时间,使这一切变得更简单…)