2014-09-04 237 views
5

我有一个DateTimeOffSet类型的变量。我想过滤1月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

那么我的上面的查询仍然相关?

是的。当您比较两个值时,这是比较的“绝对”时间。文档根据UtcDateTime属性讨论了这个问题。例如,从op_GreaterThan documentation

如果UtcDateTime值左迟于UtcDateTime值;否则,虚假

所以只要这是你想要的行为(我会想象它),你应该没问题。 (不可否认,我们并不知道查询在哪里执行 - 如果这是LINQ to SQL或EF,那么你会依靠实现相同的语义,但我认为这是一个合理的预期。)

5

DateTimeOffset在&位置生成值的位置维护与GMT的偏移量。这意味着“2001-01-25 05:21:46.4370000 -08:00”被记录在距格林威治标准时间8小时的地点和时间(相对于DST)中,而“2005-06-17 00: 00:00.0000000 -07:00“是在格林尼治标准时间晚7个小时的地点&录制的。

但是,比较时忽略时区部分。换句话说,每个日期时间转换为GMT/UTC,并将这些时间进行比较。