我正在尝试研究如何在Windows上以(TZ)格式检索当前系统时区,即.America/New_York,我需要将此提供给此应用程序与之通信的API.
我正在使用
TimeZone.CurrentTimeZone
Run Code Online (Sandbox Code Playgroud)
这给了我这个输出
GMT Standard Time
Run Code Online (Sandbox Code Playgroud)
我希望得到的是类似的东西
Europe/London
Run Code Online (Sandbox Code Playgroud)
我错过了一些简单的东西,或者这是不可用的,因此这是否意味着我需要自己进行转换?
我建议使用NodaTime.
您可以像这样获得系统的时区:
DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
Run Code Online (Sandbox Code Playgroud)
如果您使用,它将根据您的需要获得IANA时区 tz.ToString()
(除此之外,它是一个非常好的开源库,可以处理IMHO中的时区,日期时间,瞬间和日历,比内置的.NET DateTime类更加结构化和可靠.)
NodaTime由SO中的一些高级用户维护并得到很好的支持;).
有关信息,您获得并且不需要的输出(.NET使用的输出)称为BCL时区,但您需要IANA时区(或TZDB)(更准确)
野田时间是一个很好的选择。它是一个比 .NET 内置的更好、更全面的用于处理日期、时间和时区的 API。
但是,如果获取 IANA TZDB 格式的系统时区是您在此空间中唯一要做的事情,您可能会发现使用我的TimeZoneConverter库更简单。
string tz = TZConvert.WindowsToIana(TimeZoneInfo.Local.Id);
Run Code Online (Sandbox Code Playgroud)