當您在 Windows 機器上運行 .net 時,它會從 Windows 注冊表中提取時區資訊,因此使用 Windows 時區 ID 而不是 IANA。您可以在它們之間進行轉換,但請考慮以下代碼:
TimeZoneInfo.TryConvertIanaIdToWindowsId("Canada/Eastern", out string temp2);
TimeZoneInfo.TryConvertWindowsIdToIanaId(temp2, out string temp3);
Debug.WriteLine(temp2 ?? "NULL"); //Eastern Standard Time
Debug.WriteLine(temp3 ?? "NULL"); //America/New_York
從 Windows 時區轉換為 IANA 時區不是兩種方式。似乎有一個規范的時區,Windows 的集群時區被更改為(在本例中為紐約)。
這在非 Windows 機器上不是問題,因為它們都使用 IANA,但是對于 Windows,我無法獲得用戶的真正 IANA 時區。有沒有辦法解決?
如果 Windows 組合在一起的時區(如“美國/紐約”和“加拿大/東部”到“東部標準時間”)可能最終(或已經)具有不同的歷史夏令時規則,那么 Windows 怎么能逃脫懲罰呢?也就是說,即使它們除了名稱之外都相同,我想以某種方式獲得機器的正確 IANA 時區。
uj5u.com熱心網友回復:
該方法TimeZoneInfo.TryConvertWindowsIdToIanaId有一個多載,您可以在其中指定區域:
TimeZoneInfo.TryConvertWindowsIdToIanaId(string windowsId, string? region, out string ianaId);
使用 region 引數,您可以將國家/地區指定為ISO 3166 代碼。
您可以通過以下方式獲取國家/地區代碼RegionInfo.CurrentRegion.TwoLetterISORegionName
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/495284.html
