簡體   English   中英

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

[英]IsoDate and DateTime in MongoDB using C#

讓我們假設我想在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但沒有找到任何理由為什么它應該被轉移。 可以嗎?

我相信問題是DateTime.TryParse給你一個DateTimeKind Local ...而ISO日期總是在UTC 我希望MongoDB代碼的某些部分將本地DateTime轉換為UTC中的一個。 這在很大程度上不是你的錯 - 基本上, DateTime是一個非常令人困惑的類型

我懷疑如果你在解析代碼中指定DateTimeStyles.AssumeUniversal ,它會做你期望的。

(無恥的插件:我自己的項目, Noda Time ,讓這一切變得更加簡單......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM