Определение часового пояса PST на инглиш sh Windows установке - PullRequest
0 голосов
/ 08 апреля 2020

Я столкнулся с этой странной проблемой, когда мне нужно получить информацию о часовом поясе PST (например, MUI_Std, Std, TZI и т. Д. c.) С японской машины Windows OS, но я не могу найти надежный способ сделать это.

Я попробовал API RegLoadMUIStringW. Но он возвращает мне имя часового пояса PST в локализованном формате. У меня есть название часового пояса PST на английском языке sh. Поэтому, используя выходные данные этого API, я не могу сравнить и сказать, относится ли значение, считываемое из реестра, к часовому поясу PST.

Одним из возможных решений является использование в коде значения MUI_Std часового пояса PST (значение @ tzres.dll, -212) и сравните это значение со значениями, считанными из реестра. Таким образом, я узнаю, является ли часовой пояс, который я читаю, PST или нет. Но я не уверен, является ли это надежным способом определения часового пояса PST.

Дайте мне знать, есть ли у кого-нибудь какие-либо данные по этому вопросу.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Я написал недавнюю статью SQL Shack , в которой показано, как извлечь информацию о настройке часового пояса / часового пояса непосредственно из реестра Windows P C. Этот метод показывает настольные приложения C# и VB. net, которые создают текстовые файлы с информацией о часовом поясе и настройке часового пояса. Я поместил код на мой ресурс GitHub , и вы можете изменить его, если он не содержит точных данных, которые вам нужны. Более раннее содержание мистера Джонсона-Пинта здесь, в SO, и в его блоге действительно помогло мне развить мои идеи.

HTH!

0 голосов
/ 08 апреля 2020

Часовые пояса идентифицируются по их идентификатору (так называемое «Имя ключа»), а не по локализованным именам. Идентификаторы не локализованы.

Таким образом, независимо от языка операционной системы, вы найдете информацию о часовом поясе Pacifi c по адресу:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time

Только из значений внутри значения Std, Dlt и Display локализованы, а значения многоязыкового интерфейса пользователя указывают на то, где эти строки расположены в файлах ресурсов. Файлы ресурсов устанавливаются вместе с языковыми пакетами Windows. Обратите внимание, что вы не должны жестко кодировать значение (например, -212), потому что в будущем обновлении может появиться новая строка, которая может его изменить.

Кроме того, если вам просто нужно получить информацию о часовом поясе для учитывая идентификатор, вам на самом деле не нужно обращаться к реестру вообще. Просто используйте функцию EnumDynamicTimeZoneInformation для итерации по часовым поясам в поисках той, которая соответствует желаемой TimeZoneKeyName (которая снова не локализована).

Если, однако, вы ища их локализации на языках , отличных от текущего языка ОС, вы можете попробовать взглянуть на проект TimeZoneWindowsResourceExtractor .

...