2013-03-28 54 views
6

我有接受日期時間值與時區作爲字符串(數據來自外部系統)的過程。我需要將這個日期時間翻譯成本地機器時區的時間。轉換時間從不同的時區,包括夏時制

示例代碼:

string cetId = "Central European Standard Time"; 
if (timeZone == "CET") 
{ 
    TimeZoneInfo cetZone = TimeZoneInfo.FindSystemTimeZoneById(cetId); 
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cetZone, TimeZoneInfo.Local); 
} 
else if (timeZone == "CEST") 
{ 
    TimeZoneInfo cestZone = TimeZoneInfo.FindSystemTimeZoneById(cetId); 
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cestZone, TimeZoneInfo.Local); 
} 

我需要做具體的事情,如果時間是CEST(歐洲中部夏令時間),而不是CET(歐洲中部時間)或不.NET的TimeZoneInfo對象處理這種情況?

回答

1

你應該沒問題。

您正在告訴ConvertTime兩個時區(源和目標)是什麼。

你有這個具體問題還是你只是要求確認?

+0

我只是擔心,夏令時踢在根據時段和不同的日期我擔心時代不會適當地轉化 – Tadhg

0

TimeZoneInfo.ConvertTime()

The value of the Kind property of the dateTime parameter must correspond to the sourceTimeZone parameter, as the following table shows. 

只是想補充一點,你需要注意你的StatusDateTime的「之類的」屬性。在你的情況下,它必須是'未指定'。退房的「備註」部分

0

我創建了一個庫,而回封裝這些類型的變換:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/UtcTimeZone.cs

可能對你有用,或者你可能只是想撿起來交給仔細檢查你的代碼。它封裝的一件事是@ Brian的告誡 - 因此它具有與.Kind屬性相關的明確方法名稱,如果.Kind錯誤則拋出有用的異常。它也需要繁重的工作一點點出越來越有用/普通/夏令時的名稱和縮寫:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/TimeZoneShortNameMap.cs

相關問題