簡體   English   中英

如何在不轉換的情況下在 C# 中獲取 IANA 時區

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM