Załóżmy, że chcę zapytać o mongo na temat dateTime. Mam dwie zmienne C# reprezentujące datę początkową i końcową.IsoDate i DateTime w MongoDB przy użyciu C#
1) {20.10.2011 0:00:00}
2) {22.10.2011 0:00:00}
Teraz BsonDateTime.Create (dateTime) przekształca je do BSON DateTime a także:
1) 2011-10-20T00: 00: 00 MongoDB.Bson.BsonDateTime
2) 2011-10-22T00: 00: 00 MongoDB.Bson.BsonDateTime
to kod tworzący dateTi mes (_value jest ciągiem znaków):
DateTime dateTime;
bool parsed = DateTime.TryParse(_value, out dateTime);
if (!parsed)
throw new FormatException("Wrong format for a query param");
return BsonDateTime.Create(dateTime);
Wtedy następny kod buduje zapytanie:
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);
}
i mam dostać taką dziwną wartość w zapytaniu:
"Sessions.End" : { "$gte" : ISODate("2011-10-19T21:00:00Z"), "$lte" : ISODate("2011-10-21T21:00:00Z") },
Dobrze , Google ISODate, ale nie znalazłem żadnego powodu, dla którego powinien on zostać przesunięty. Czy to jest w porządku?
Mówisz, masz dwie zmienne C#, ale nie wykazały, w jaki sposób są one zainicjowany lub nawet co wpisz, jakie są. Podejrzewam, że to jest sedno rzeczy, ale nie możemy powiedzieć, nie widząc kodu. Domyślam się, że utworzyłeś * lokalne * wartości DateTime zamiast UTC. –
@Jon Skeet, dodano kod do utworzenia dateTime, co to jest UTC? –
Zobacz moją odpowiedź - kliknij link, aby wyświetlić opis UTC. Zasadniczo jest to problem strefy czasowej, podejrzewam ... –