将 .Net TimeZoneInfo 转换为 POSIX 时区

Convert .Net TimeZoneInfo to POSIX time zone

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

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

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

我刚刚添加了对 POSIX 时区字符串的支持,作为我的 TimeZoneConverter project. It is in a separate package called 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 转换。
  • 他们不为自己提供任何历史变化。

关于最后一点,上面显示的示例使用 当前 年份,但也有重载来提供年份以生成特定于该年份的字符串。