Получение описания часового пояса с NodaTime - PullRequest
1 голос
/ 24 марта 2020

Используя встроенную библиотеку. NET, я могу использовать такой вызов

TimeZoneInfo.GetSystemTimeZones()[120].DisplayName

, который дает красиво отформатированный часовой пояс (UTC + 10: 00) Хобарт

Есть ли в NodaTime что-то, чтобы отформатировать TimeZone удобным для пользователя способом, подобным этому?

Более конкретно, как я могу получить названия городов для часового пояса, смещение это не так сложно получить .

1 Ответ

1 голос
/ 25 марта 2020

Сначала несколько вещей:

  • Отображаемые имена, исходящие из объекта TimeZoneInfo, локализованы в языковых настройках операционной системы, и вы не можете указать конкретный язык c или культура.

  • Они также несовместимы на разных платформах. В качестве примера вы привели вывод при работе на Windows, но не на Linux или Ma c OSX.

  • Noda Time не инкапсулирует отображаемые имена. Локализации, как правило, выходят за рамки. Итак, простой ответ на ваш вопрос - нет.

Однако именно поэтому (частично) существует моя библиотека TimeZoneNames . Он работает с IANA или Windows идентификаторами часовых поясов и предоставляет локализованные имена для отображения часовых поясов в различных случаях использования. Вы можете использовать его в сочетании с NodaTime или самостоятельно. Например:

DateTimeZone tz = DateTimeZoneProviders.Tzdb["Australia/Hobart"];
string displayName = TZNames.GetDisplayNameForTimeZone(tz.Id, "en-US");
Console.WriteLine(displayName); // "(UTC+10:00) Hobart"

Это вернет согласованный вывод на разных платформах и даст вам полный контроль над культурой, используемой для локализации вывода.

...