代码之家  ›  专栏  ›  技术社区  ›  Kagemand Andersen

将.NET时区信息转换为POSIX时区

  •  1
  • Kagemand Andersen  · 技术社区  · 7 年前

    我需要将.NET中的时区转换为 POSIX timezone . 我可以从 TimeZoneInfo 通过 GetAdjustmentRules 但是我仍然会丢失时区缩写代码(例如MST/MDT、PST/PDT等)。在C.NET中执行此操作。

    从本质上说,我所寻找的恰恰相反: Convert a posix style timezone to timezoneinfo in c# .net

    有没有这样的解决方案?或者有人知道在哪里可以获得标准和夏令时缩写代码吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Matt Johnson-Pint    7 年前

    我刚添加了对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转换。
    • 他们不会给自己带来任何历史变化。

    在最后一点上,上面显示的示例使用 现在的 年,但是也有过载来提供一年来生成特定于该年的字符串。