簡體   English   中英

OS顯示語言為非英語時獲取本地時區標識符

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

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