使用 NodaTime 获取时区描述

Getting time zone description with NodaTime

使用内置的 .NET 库,我可以使用这样的调用

TimeZoneInfo.GetSystemTimeZones()[120].DisplayName

这给出了一个格式很好的时区 (UTC+10:00) 霍巴特

NodaTime 中有什么东西可以像这样以用户友好的方式格式化时区吗?

更具体地说,我如何获得时区的城市名称,偏移量并不难获得。

先说几件事:

  • 来自 TimeZoneInfo 对象的显示名称已本地化为操作系统的语言设置,您无法提供特定语言或文化。

  • 它们在不同平台上也不一致。您给出的示例是 运行 在 Windows 上的输出,但在 Linux 或 Mac 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"

这将 return 跨平台输出一致,并让您完全控制用于本地化输出的区域性。