Я создаю веб-приложение, которое предложит пользователю список доступных часовых поясов. Однако я не хочу видеть весь список часовых поясов, потому что он длинный, и мне ничего не нужно за пределами одной или двух стран. Есть ли способ фильтровать определенные часовые пояса или на основе страны или даже нескольких стран?Как фильтровать временные интервалы?
ответ
В Noda Time вы можете отфильтровать временные зоны TZDB по странам, используя информацию о местоположении, хранящуюся в TzdbDateTimeZoneSource.Default.ZoneLocations
.
Каждый ZoneLocation
имеет ZoneId
(например, America/Los_Angeles
) и двухбуквенный код страны, такой как «США». Вы можете использовать это для фильтрации часовых поясов в стране, as shown in this answer.
Единственным недостатком такого подхода является то, что вы все еще остаетесь с идентификатором часового пояса, чтобы показывать пользователя. Если вы хотите показать что-то более дружелюбное, например, «Восточное время» или «Центральноевропейское время», эти ценности не находятся в Ноде. Вместо этого вы можете использовать TimeZoneNames library.
С помощью TimeZoneNames вы можете выполнить одну операцию, чтобы получить часовые пояса со своими идентификаторами и локализованными отображаемыми именами для определенного языка. Например:
var zones = TZNames.GetTimeZonesForCountry("US", "en");
Смотрите TimeZoneNames ридми для дополнительных операций и выхода образца.