我不確定你在哪裏閱讀他們只是英文。從MSDN Documentation:
兩個StandardName
和DaylightName
根據當前用戶的默認UI語言本地化。
此外,在現代的Windows,你應該大多使用的DYNAMIC_TIME_ZONE_INFORMATION
結構,API,如GetDynamicTimeZoneInformation
,而不是經典GetTimeZoneInformation
功能。這個結構包含相同的標準和日光名稱,也是本地化的。
按照預期使用時,這些結構充滿來自Windows註冊表的信息,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
之下。每個條目都有四根弦是中肯:
的Std
值是在標準時間是在效果上要使用的本地化名稱。這被映射到結構中的StandardName
字段。
Dlt
值是在夏令時生效時使用的本地化名稱。這被映射到結構中的DaylightName
字段。
的Display
值用於本地化名稱一般地表示的時區的條目,並且顯示時間區的列表時使用 - 如在Windows控制面板,或與tzutil.exe
在命令行上,或者用.NET中的TimeZoneInfo.DisplayName
。它不是Win32結構的一部分。
該註冊表項的密鑰從未本地化。它始終是英文的,並且是時區的唯一標識符。在DYNAMIC_TIME_ZONE_INFORMATION
結構中,它對應於TimeZoneKeyName
字段。在.NET中它對應於TimeZoneInfo.Id
。同時請記住,儘管密鑰通常是與標準名稱的英文形式相匹配,但有一些例外情況不適用。此外,特定鍵的名稱保證不會改變,而理論上它的本地化值可能會改變。
在這裏,您可以看到顯示名稱在Windows控制面板中的英文和中文顯示方式。類似的定位與標準和日光發生名稱:
最後一點 - 恕我直言,這些名稱在很多情況下很垃圾。例如,沒有「GMT Daylight Time」這樣的事實 - 它實際上被稱爲「英國夏令時」。本地化時區名稱的唯一良好來源是CLDR,您可以直接使用該庫,也可以通過庫(例如C和Java中的ICU)或.NET的TimeZoneNames庫。
很好的回答。錯過了GetTimeZoneInformation底部的行。似乎奇怪的是,微軟會決定翻譯所有的字符串,特別是因爲結構不會被用戶界面看到。謝謝你的幫助。 –