C# 使用NodaTime获取时区描述
使用内置的.NET库,我可以使用这样的调用C# 使用NodaTime获取时区描述,c#,nodatime,C#,Nodatime,使用内置的.NET库,我可以使用这样的调用 TimeZoneInfo.GetSystemTimeZones()[120].DisplayName 它提供了一个格式良好的时区(UTC+10:00)Hobart 在NodaTime中是否有一些东西可以像这样以用户友好的方式格式化时区 更具体地说,如何获得时区的城市名称,偏移量并不难获得。首先要做几件事: 来自TimeZoneInfo对象的显示名称本地化为操作系统的语言设置,您不能提供特定的语言或区域性 它们在不同平台之间也不一致。您给出的示例是在
TimeZoneInfo.GetSystemTimeZones()[120].DisplayName
它提供了一个格式良好的时区(UTC+10:00)Hobart
在NodaTime中是否有一些东西可以像这样以用户友好的方式格式化时区
更具体地说,如何获得时区的城市名称,偏移量并不难获得。首先要做几件事:
- 来自
对象的显示名称本地化为操作系统的语言设置,您不能提供特定的语言或区域性TimeZoneInfo
- 它们在不同平台之间也不一致。您给出的示例是在Windows上运行时的输出,而不是在Linux或Mac OSX上运行时的输出
- Noda Time不封装显示名称。本地化通常超出范围。所以你的问题的简单答案是-不
DateTimeZone tz=DateTimeZoneProviders.Tzdb[“澳大利亚/霍巴特”];
字符串displayName=TZNames.getdisplayname-fortimezone(tz.Id,“en-US”);
Console.WriteLine(显示名称);//“(UTC+10:00)霍巴特”
这将返回跨平台的一致输出,并使您能够完全控制用于本地化输出的区域性。这是否回答了您的问题?不太可能,因为(UTC+10:00)不是很难获得,这是一个很棘手的霍巴特问题。我在睡觉前就看到了这个问题,所以虽然我没有时间研究它,但你可能想浏览一下
NodaTime.TimeZones
包的文档。。。尽管要知道NodaTime有两个时区选项,其中一个是您已经提到的TimeZoneInfo类(在NodaTime中显示为BclDateTimeZone
)。