将.Net TimeZoneInfo转换为POSIX时区

时间:2018-12-20 14:05:34

标签: c# .net timezone posix

我需要将.Net中的时区转换为POSIX timezone。我可以通过TimeZoneInfoGetAdjustmentRules获取夏令时的开始,结束和增量时间,但是那时我仍然会缺少时区缩写代码(例如MST / MDT,PST / PDT等)。在C#.Net中执行此操作。

本质上,我要寻找的是与此相反的内容:Convert a posix style timezone to timezoneinfo in c# .net

是否存在针对此类问题的现有解决方案?还是有人知道我可以在哪里获得标准时间和夏令时的缩写代码?

1 个答案:

答案 0 :(得分:1)

我刚刚为TimeZoneConverter项目添加了对POSIX时区字符串的支持。它位于称为TimeZoneConverter.Posix的单独软件包中。安装它,然后您可以执行以下操作:

string posix = PosixTimeZone.FromTimeZoneInfo(SomeTimeZoneInfoObject);

此外,您可以简单地提供Windows时区ID或IANA时区名称,这也将起作用:

string posix = PosixTimeZone.FromWindowsTimeZoneId("Eastern Standard Time");
// Result: "EST5EDT,M3.2.0,M11.1.0"

string posix = PosixTimeZone.FromIanaTimeZoneName("Australia/Sydney");
// Result: "AEST-10AEDT,M10.1.0,M4.1.0/3"

请记住,您仍然受POSIX时区的限制:

  • 他们每年只能支持两次过渡。
  • 并非所有时区转换都适用于DST。有些是针对标准时间的更改,此处未反映出来。它们看起来像DST过渡。
  • 他们没有提供任何历史变化。

最后一点,上面显示的示例使用了 current 年,但是也存在提供一年以生成特定于该年的字符串的重载。