gpt4 book ai didi

c# - 使用 C# 在 MongoDB 中使用 IsoDate 和 DateTime

转载 作者:太空狗 更新时间:2023-10-29 18:23:12 26 4
gpt4 key购买 nike

让我们假设我想在 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,但没有找到应该移动它的任何理由。可以吗?

最佳答案

我相信问题是 DateTime.TryParse 给你一个 DateTimeKindLocal ... 而 ISO 日期始终在 UTC 中.我希望 MongoDB 代码的某些部分将本地 DateTime 转换为 UTC 格式的时间。这在很大程度上不是你的错 - 基本上,DateTime is a very confusing type .

我怀疑如果您在解析代码中指定 DateTimeStyles.AssumeUniversal,它会执行您期望的操作。

(无耻的插件:我自己的项目,Noda Time,让这一切变得简单多了...)

关于c# - 使用 C# 在 MongoDB 中使用 IsoDate 和 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com