2014-05-02 19 views
0

我想將UTC日期時間轉換爲本地日期時間,而不想使用.net TimeZoneInfo或其他關於此的類。如何將UTC日期時間轉換爲不帶TimeZoneInfo類的本地日期時間?

我知道德黑蘭是格林威治時間+03偏移:30我用下面的代碼爲UTC日期時間轉換爲德黑蘭(我的本地計算機在此位置):

DateTime dt = DateTime.UtcNow.AddHours(3.30); 

它顯示的時間像5/2/2014 8:32:05 PM但德黑蘭時間是2014年5月2日9:32:05它有一個小時的尊重。 我該如何修復它?

+0

夏令時? – tyh

+0

*爲什麼*你不想使用'TimeZoneInfo'或類似的東西? –

+0

@Jon Skeet,因爲一些國家沒有安裝在Windows時區和TimeZoneInfo.GetSystemTimeZones()不能與主題 – motevalizadeh

回答

2

我知道德黑蘭是格林威治時間+03偏移:30

嗯,這是它從UTC在標準時間偏移,但它目前觀察夏令時(details)。所以當前的UTC偏移量實際上是+04:30,因此相差一個小時。

我懷疑你是真的關閉了一個多小時,但是,你是添加3.3小時,這是3小時18分鐘的偏移量。字面3.30並不意味着「3小時30分鐘」,這意味着3.30作爲double文字。如果你想要3小時30分鐘,這是3個半小時,所以你需要使用3.5。德黑蘭時間當你發佈的時間是下午9點46分...所以我懷疑你實際上在9:44 PM運行的代碼。

這類事情就是爲什麼你真的應該真的使用一個合適的時區感知系統,而不是自己編寫代碼。我個人不會使用TimeZoneInfo - 我會使用我的Noda Time庫,它允許您通過TimeZoneInfoIANA time zone database使用Windows時區。後者 - 也被稱爲Olsen或TZDB或zoneinfo,是非Windows平臺上最常用的時區數據庫。

相關問題