2014-09-04 7 views
5

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

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

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 работает.

ответ

8

Как мой предыдущий запрос по-прежнему имеет значение?

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

истинно если значение UtcDateTime покинул позже, чем UtcDateTime значения правой; в противном случае, false.

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

5

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

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

Смежные вопросы