如何以TZ格式检索系统时区.net c#

chi*_*hip 4 .net c# timezone

我正在尝试研究如何在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)

我错过了一些简单的东西,或者这是不可用的,因此这是否意味着我需要自己进行转换?

Pac*_*ac0 8

我建议使用NodaTime.

您可以像这样获得系统的时区:

DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
Run Code Online (Sandbox Code Playgroud)

如果您使用,它将根据您的需要获得IANA时区 tz.ToString()

(除此之外,它是一个非常好的开源库,可以处理IMHO中的时区,日期时间,瞬间和日历,比内置的.NET DateTime类更加结构化和可靠.)

NodaTime由SO中的一些高级用户维护并得到很好的支持;).


有关信息,您获得并且不需要的输出(.NET使用的输出)称为BCL时区,但您需要IANA时区(或TZDB)(更准确)


Mat*_*int 6

野田时间是一个很好的选择。它是一个比 .NET 内置的更好、更全面的用于处理日期、时间和时区的 API。

但是,如果获取 IANA TZDB 格式的系统时区是您在此空间中唯一要做的事情,您可能会发现使用我的TimeZoneConverter库更简单。

string tz = TZConvert.WindowsToIana(TimeZoneInfo.Local.Id);
Run Code Online (Sandbox Code Playgroud)