在數據庫中,我使用UTC存儲所有日期/時間。.NET通過時區名稱獲取時區偏移
我知道用戶的時區名稱(例如「美國東部標準時間」)。
爲了顯示正確的時間,我想我需要添加用戶的時區偏移到UTC日期/時間。但是,我如何通過時區名稱獲得時區偏移?
謝謝!
在數據庫中,我使用UTC存儲所有日期/時間。.NET通過時區名稱獲取時區偏移
我知道用戶的時區名稱(例如「美國東部標準時間」)。
爲了顯示正確的時間,我想我需要添加用戶的時區偏移到UTC日期/時間。但是,我如何通過時區名稱獲得時區偏移?
謝謝!
您可以使用TimeZoneInfo.FindSystemTimeZoneById
獲得使用提供的ID TimeZoneInfo.GetUtcOffset
不同於TimeZoneInfo
對象,那麼:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
TimeSpan offset = tzi.GetUtcOffset(myDateTime);
您可以使用TimeZoneInfo類的GetSystemTimeZones()方法來獲取服務器上配置的所有時區的列表,並將其與客戶端中的時區相匹配。
雖然爲什麼你有格式「美國東部標準時間」的時區?那個是從哪裏來的?
偉大的想法,現在試試吧:) 我填充一個下拉與GetSystemTimeZones返回(集合) – 2010-06-05 07:28:48
而不是在ID /每'TimeZone'對象的字符串填充下拉集合,爲什麼不把實際對象添加爲下拉菜單中的'Item's?這樣,當下拉改變時,你可以使用'(TimeZoneInfo)myDropDown.SelectedItem'獲取對TimeZoneInfo對象的引用。然後你不需要每次都調用'.FindSystemTimeZoneById',你已經擁有了目的。 – 2013-07-15 13:51:51
,而不是做一些手工此外,你應該採取的TimeZoneInfo
的ConvertTime
方法將處理轉換的優勢你的日期基於你指定的時區。
var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);
優秀的建議。 – 2015-08-12 06:51:12
這解決了我的問題。謝謝! – 2010-06-05 07:43:35
這似乎不適用於我。目前,它是「E.澳大利亞標準時間」區域的DST,因此它們的時間是GMT + 11。但是,當我運行這個時,我得到了10個小時的結果。它應該是11.代碼是:TimeZoneInfo.FindSystemTimeZoneById(「E。澳大利亞標準時間」)。GetUtcOffset(Now.ToUniversalTime).Hours。我究竟做錯了什麼? – 2011-12-02 13:07:10
@ ingredient_15939 - 可能沒有錯。您是否檢查過運行的計算機是否設置爲正確使用DST? – Oded 2011-12-02 13:08:13