TimeZoneInfo.GetSystemTimeZones () возвращает противоречивую информацию на разных компьютерах - PullRequest
3 голосов
/ 01 февраля 2012

Если я использую

foreach (TimeZoneInfo info in TimeZoneInfo.GetSystemTimeZones())
{
    if (info.ToString()...

для получения списка строк часового пояса, затем в некоторых системах он возвращает строки с префиксом (GMT), а в других системах - (UTC). Не уверен на 100% в этом, но, похоже, значения в списках Vista (GMT), в списках Windows 7 (UTC) и в списках Windows Server (GMT)

Что происходит, и могу ли я получить Windows 7 для отображения значений Vista GMT? Мне нужен согласованный список, который будет работать на всех компьютерах с Windows.

fyi В той же системе я также использую следующую строку для заполнения раскрывающегося списка MVC:

<%: Html.DropDownListFor(model => model.Timezone,new SelectList(TimeZoneInfo.GetSystemTimeZones())) %>

Спасибо

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

Вы используете TimeZoneInfo.ToString(), который использует TimeZoneInfo.DisplayName.Это просто зависит от системы - это тот же список (насколько я могу судить), который отображается, если вы собираетесь редактировать часовой пояс системы через часы.(Я только что посмотрел на машины Vista и Windows 7 и увидел те же имена, которые вы только что описали.)

Если вы ищете непротиворечивое имя, используйте вместо этого свойство Id.Если вы хотите согласованное сопоставление идентификатора с каким-либо известным набором отображаемых имен, вам необходимо настроить его самостоятельно (например, через единую базу данных, с которой общаются все ваши системы).Вы не должны отображать само свойство Id для пользователей, так как это довольно запутанно - это почти всегда стандартное время ID, которое может сбить людей с толку, когда они переходят на летнее времявремя.

Если вы хотите вытолкнуть лодку, Unicode CLDR содержит информацию о том, как отображать часовые пояса для пользователей (см. core/common/bcp47/timezone.xml), но использует идентификаторы zoneinfo, поэтомузатем вам нужно будет сопоставить их с системными идентификаторами Windows (что выполнимо; эта информация также находится в CLDR, в core/common/supplemental/windowsZones.xml).

0 голосов
/ 14 марта 2013

RE: «Не уверен на 100% в этом, но, похоже, значения в списках Vista (GMT), в списках Windows 7 (UTC) и в списках Windows Server (GMT)»

Windows Server 2008 R2 возвращает UTC. Server 2003 вернул время по Гринвичу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...