Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用NodaTime获取时区描述_C#_Nodatime - Fatal编程技术网

C# 使用NodaTime获取时区描述

C# 使用NodaTime获取时区描述,c#,nodatime,C#,Nodatime,使用内置的.NET库,我可以使用这样的调用 TimeZoneInfo.GetSystemTimeZones()[120].DisplayName 它提供了一个格式良好的时区(UTC+10:00)Hobart 在NodaTime中是否有一些东西可以像这样以用户友好的方式格式化时区 更具体地说,如何获得时区的城市名称,偏移量并不难获得。首先要做几件事: 来自TimeZoneInfo对象的显示名称本地化为操作系统的语言设置,您不能提供特定的语言或区域性 它们在不同平台之间也不一致。您给出的示例是在

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

TimeZoneInfo.GetSystemTimeZones()[120].DisplayName
它提供了一个格式良好的时区(UTC+10:00)Hobart

在NodaTime中是否有一些东西可以像这样以用户友好的方式格式化时区

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

首先要做几件事:

  • 来自
    TimeZoneInfo
    对象的显示名称本地化为操作系统的语言设置,您不能提供特定的语言或区域性

  • 它们在不同平台之间也不一致。您给出的示例是在Windows上运行时的输出,而不是在Linux或Mac OSX上运行时的输出

  • Noda Time不封装显示名称。本地化通常超出范围。所以你的问题的简单答案是-不

然而,这就是我的图书馆存在的部分原因。它与IANA或Windows时区标识符配合使用,并为各种用例中的时区显示提供本地化名称。您可以将它与NodaTime结合使用,也可以单独使用。例如:

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
)。