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