我需要将.net中的时区转换为posix时区。我可以通过GetAdjustmentRules
从TimeZoneInfo
获取日光启动,结束和DELTA,但是随后我仍然缺少时区缩写代码(例如MST/MDT,PST/PDT等)。在c#.net中执行此操作。
本质上,我正在寻找的与此相反的是:将POSIX样式时区转换为C#.NET中的TimeZoneInfo
是否有这样的解决方案?还是有人知道我可以在哪里获得标准和日光时间缩写代码?
我刚刚添加了对POSIX时区字符串的支持,作为我的TimeZoneConverter项目的附加组件。它在一个称为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过渡。
- 他们没有向自己提供任何历史变化。
在最后几点,上面显示的样本使用了当前年,但是也有超负荷可以提供一年来生成特定于当年的字符串。