[英]Getting local timezone identifier when OS display language is non-english
奇怪的是, TimeZone.CurrentTimeZone.StandardName
按照計算機顯示語言返回本地化名稱。 我想要一個程序化標識符,我可以在下面的代碼中提供給TimeZoneInfo
。
TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZone);
FindSystemTimeZoneById
需要一個唯一的非本地化程序標識符
我將計算機顯示語言改為中文,當我執行TimeZone.CurrentTimeZone.StandardName
時,我得到了一個本地化的unicode字符串。 然而,價值是正確的,但它本地化在計算機顯示語言,這是我不想要的。
我現在沒有使用TimeZoneInfo.Local.Id
選項,因為我的項目是在.Net 2.0中。 我還有哪些其他選項來獲取非本地化的時區標識符?
要在不能使用TimeZoneInfo
類的情況下獲得等效的TimeZoneInfo.Local.Id
,您必須直接進入注冊表。
在.NET 2.0 C#中,您可以使用以下方法檢索它:
private static string GetLocalTimeZoneId()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(
@"SYSTEM\CurrentControlSet\Control\TimeZoneInformation");
string value = (string)key.GetValue("TimeZoneKeyName");
if (string.IsNullOrEmpty(value))
value = (string)key.GetValue("StandardName");
key.Close();
return value;
}
Windows Vista和更高版具有TimeZoneKeyName
值,並在StandardName
值中具有@tzres.dll
指針條目。
在Windows Vista之前, StandardName
值包含密鑰名稱,並且未本地化。
上面的代碼說明了這兩種變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.