2011-10-21 3 views
8

mongo에 dateTime을 쿼리하려고한다고 가정 해보자. 시작과 종료 날짜를 나타내는 두 개의 C# 변수가 있습니다.IsoDate와 DateTime은 C#을 사용하는 MongoDB에서

1) {} {20.10.2011 0시 0분 0초 0시 0분 0초 2011년 10월 22일}

이제 BsonDateTime.Create (날짜 시간)은 날짜 시간 BSON로 변환

2) 또한 너무 :

1) 2011-10-20T00 : 00 : 00 MongoDB.Bson.BsonDateTime

2) 2011-10-22T00 : 00 : 00 MongoDB.Bson.BsonDateTime

이것은 인 dateTi를 만드는 코드

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") }, 

을 MES (_value는 문자열입니다) , 나는 구글 ISODate하지만 왜 이동 해야하는지 어떤 이유를 발견하지 못했습니다. 괜찮습니까?

+1

당신은 당신이 개 C의 # 변수를 말하지만, 당신도 그들이 초기화하는 방법을 표시하지 않았거나 (뻔뻔 플러그 내 자신의 프로젝트, Noda Time는 많은 간단한이 ... 모두를한다) 그들은 유형입니다. 나는 그것이 사물의 핵심이라고 강력하게 의심하지만, 우리는 그 규범을 보지 않고는 말할 수 없다. 내 추측으로는 UTC 대신 * local * DateTime 값을 만들었다는 것입니다. –

+0

@ 존 Skeet, dateTime 생성을위한 코드를 추가, UTC는 무엇입니까? –

+0

내 대답보기 - UTC에 대한 설명은 링크를 클릭하십시오. 기본적으로 이것은 시간대 문제입니다 ... –

답변

12

나는 문제가 ISO 날짜가 UTC 항상 반면 DateTime.TryParse이 ... LocalKind 당신에게 DateTime을주고 있다고 믿습니다. MongoDB 코드의 일부가 로컬 DateTime을 UTC로 변환하려고합니다. 주로 이 아니며 오류 - 기본적으로 DateTime is a very confusing type입니다.

구문 분석 코드에 DateTimeStyles.AssumeUniversal을 지정하면 의심스러운 결과가 발생합니다.

:

+0

Jon에게 도움을 주셔서 감사합니다.이 범용적인 것은 정말 혼란 스럽습니다. 더 나은 시간표를 얻고 싶습니다. –

+1

mongodb는 항상 UTC로 datatime을 저장합니다. mongodb C# 드라이버는 값을 저장할 때 utc로 변환하고 db에서 값을 읽을 때 로컬로 되돌립니다. –

관련 문제