2014-09-04 156 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,並將這些時間進行比較。