2012-04-04 11 views
8

中歐的通用TimeZoneInfo是否考慮到了CET和CEST?中歐是否有一個通用的TimeZoneInfo?

我有一個應用程序,做以下幾點:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset); 
var utcDate = dto.ToUniversalTime().DateTime; 

的問題是,這是返回錯誤utcDate因爲BaseUtcOffset是+1,而不是+2。看來CET也有DST,並且取決於一年中的時間是+1還是+2。

回答

5

首先,我想用鼓掌野田時間mgnoonan的回答:)但是,如果你感覺不太喜歡冒險......

您已經在使用正確的時區 - 但你不應該使用BaseUtcOffset這是記錄也不被看好DST:

獲取當前時區的標準時間與協調世界時(UTC)之間的時間差。

它不可能採取DST考慮,當你沒有提供它DateTime獲取用於:)

假設someDateDateTime偏移,您可以使用:

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate)); 

或者只是ConvertTimeToUtc

var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi); 

注如果由於DST轉換而導致本地時間出現兩次,或根本沒有發生,那麼您應該計算出您想要執行的操作。

+0

我知道我應該等待你回答。 ;) – mgnoonan 2012-04-05 10:56:39

+0

很好的解釋。雖然野田時間可能是正確的工具,但它工作並且是當前項目的最佳解決方案。 – 2012-04-06 14:20:56

+0

只是一個小的評論:ConvertTimeToUtc現在是一個靜態方法,所以你需要調用 var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate,tzi) – Eoin 2016-01-18 19:27:32

4

也許Noda Time可以幫你嗎?

+0

下次我使用日期時,肯定會考慮Noda時間。謝謝! – 2012-04-06 14:21:16

相關問題