Как сравнить два DateTimeOffSet?

У меня есть переменная, которая имеет тип DateTimeOffSet. Я хотел бы отфильтровать все проекты, созданные после 1 января 2010 года.

Итак, я написал следующий запрос:

   var _date = new DateTimeOffset(2010, 01, 01, 0, 0, 0, new TimeSpan(-7, 0, 0));

   var projects = _repository.Find<Project>
                 (x => x.CompanyId = CompId && x.CreatedOn > _date)
                .ToList();

Но когда я смотрю на базу данных, это тип значений, которые я вижу:

2001-01-25 05:21:46.4370000 -08:00
2005-06-17 00:00:00.0000000 -07:00

Очевидно, что некоторые значения имеют -08:00, а другие имеют -07: 00. Так что мой приведенный выше запрос все еще актуален? Когда я смотрю на результат, фильтрация выполняется так, как я этого ожидаю. Единственная проблема заключается в том, что означает эта часть смещения, может быть, результат хорош случайно.

Я не очень знаком с тем, как работает DayeTimeOffSet.

2 ответа

Так что мой приведенный выше запрос все еще актуален?

Да. Когда вы сравниваете два DateTimeOffset значения, это "абсолютное" время, которое сравнивается. Документация говорит об этом с точки зрения UtcDateTime имущество. Например, из op_GreaterThan документация:

правда, если UtcDateTime Значение слева позже, чем UtcDateTime ценность права; иначе ложно.

Так что, пока вы хотите именно такое поведение (которое я себе представляю), у вас все будет хорошо. (Конечно, мы не знаем, где выполняется запрос - если это LINQ to SQL или EF, то вы полагаетесь на то, что реализуете ту же семантику, но я думаю, что это разумное ожидание.)

DateTimeOffset поддерживает смещение от GMT во время и в месте, где было сгенерировано значение. Это означает, что "2001-01-25 05:21:46.4370000 -08:00" было записано в месте и времени года (относительно летнего времени), которые были на 8 часов позже GMT, а "2005-06-17 00:00:00.0000000 -07:00"было записано в месте и времени года, которые были на 7 часов позже GMT.

Тем не менее, часть часового пояса игнорируется при сравнении. Другими словами, каждое время даты преобразуется в GMT / UTC и сравнивается.

Другие вопросы по тегам