将joda时区映射到windows时区(例如在c#中)

本文关键字:时区 joda 映射 windows | 更新日期: 2023-09-27 18:03:55

我在将joda时区映射到windows时区时遇到问题。

我使用CLDR映射的xml,它适用于大多数翻译。

然而,它没有几个joda时区的值:

美国/印第安纳州/印第安纳波利斯,BST,澳大利亚/维多利亚,环球,澳大利亚/新南威尔士州,美国/fort wayne,非洲/阿斯马拉,美国/肯塔基州/路易斯维尔,亚洲/喀什,美国/太平洋,澳大利亚/西部,澳大利亚/昆士兰,澳大利亚/南部,美国/东部,美国/中部,美国/亚利桑那州,澳大利亚/塔斯马尼亚州,新西兰,美国/山区,澳大利亚/欧几拉,格林尼治标准时间,日本,CAT等/GMT+0, CST, PST, EST,澳大利亚/堪培拉,墨西哥/通用,以色列,加拿大/东部等/GMT+9,加拿大/中部,澳大利亚/北

我在哪里可以找到这些joda时区到windows时区之间的映射?

将joda时区映射到windows时区(例如在c#中)

使用纯CLDR数据:
  • 检查/common/bcp47/timezone.xml文件中的区域。

    如果它不是alias字段中的第一个条目,则使用第一个条目。例子:

    <type name="aumel" description="Melbourne, Australia"
                       alias="Australia/Melbourne Australia/Victoria"/>
    

    您可以看到Australia/Victoria作为第二项,因此它是Australia/Melbourne的别名。请注意,CLDR的规范区域与TZDB的规范定义并不完全匹配,因此使用这些CLDR映射—而不是来自TZDB的link条目。

  • 现在检查/common/supplemental/windowsZones.xml文件。例子:

    <mapZone other="AUS Eastern Standard Time" territory="AU"
             type="Australia/Sydney Australia/Melbourne"/>
    

    type字段包含一个或多个tzdb zone。other字段包含对应的Windows区域

  • 请注意,不是所有的tzdb区域都有一个有效的对应的Windows区域,并且有些不是完美的映射。

    • 不完全映射的例子:America/Havana => Eastern Standard Time

      • 夏时制转换日对齐,但古巴在午夜而不是凌晨2点转换
    • 不可映射区域示例:Australia/Lord_Howe

      • 存在于timezone.xml中,但不存在于windowsZones.xml中。
      • 当前没有此位置的Windows时区条目。
  • 您的列表中有一些项目(BST, CAT, CST, PST)不是有效的tzdb区域,即使是Joda-Time的列表。这些可以是缩写或规则名,但它们不是区域标识符。