[英]How to get IANA timezone in C# without conversion
當您在 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 時區。
TimeZoneInfo.TryConvertWindowsIdToIanaId
方法有一個重載,您可以在其中指定區域:
TimeZoneInfo.TryConvertWindowsIdToIanaId(string windowsId, string? region, out string ianaId);
使用 region 參數,您可以將國家/地區指定為ISO 3166 代碼。
您可以使用RegionInfo.CurrentRegion.TwoLetterISORegionName
獲取國家/地區代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.