首页 > 解决方案 > 将 .Net TimeZoneInfo 转换为 POSIX 时区

问题描述

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

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

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

标签: c#.nettimezoneposix

解决方案


我刚刚添加了对 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 转换。
  • 他们没有为自己提供任何历史变化。

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


推荐阅读