Вы используете 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
).