Нет ничего плохого в вашем кеше. Это просто природа данных.
Для часового пояса, который вы описали, данные в Windows (для английского языка):
Id = "W. Europe Standard Time"
DisplayName = "Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
StandardName = "W. Europe Standard Time"
DaylightName = "W. Europe Daylight Time"
Вы можете использовать метод IsDaylightSavingTime
TimeZoneInfo
экземпляр, чтобы решить, какой из них выбрать.
Вам больше не следует использовать класс TimeZone
- он устарел. Используйте TimeZoneInfo.Local
вместо TimeZone.CurrentTimeZone
.
Действительно, имена, данные Windows в полях StandardName
и DisplayName
, не идеальны. Они часто не соответствуют ожиданиям. Вот почему я написал пакет TimeZoneNames . Я также подробно писал в блоге об этой проблеме .
С TimeZoneNames вы можете получить лучшие имена для текущего часового пояса, например:
var names = TZNames.GetNamesForTimeZone(TimeZoneInfo.Local.Id, "en-US");
В то же времяЗона, как и раньше, теперь вы получите имена CLDR:
names.Generic = "Central European Time"
names.Standard = "Central European Standard Time"
names.Daylight = "Central European Summer Time"
Опять же, вы можете использовать TimeZoneInfo.Local.IsDaylightSavingTime
, чтобы решить, показывать ли стандартное или дневное имя.
Если вы нене хотите жестко кодировать язык, используйте CultureInfo.CurrentCulture.IetfLanguageTag
.