2

我无法将 joda 时区映射到 Windows 时区。

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

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

America/Indiana/Indianapolis, BST, Australia/Victoria, Universal, Australia/NSW, America/Fort_Wayne, Africa/Asmara, America/Kentucky/Louisville, Asia/Kashgar, US/Pacific, Australia/West, Australia/Queensland, Australia/南部、美国/东部、美国/中部、美国/亚利桑那、澳大利亚/塔斯马尼亚、新西兰、美国/山区、澳大利亚/欧克拉、格林威治标准时间、日本、CAT、Etc/GMT+0、CST、太平洋标准时间、东部标准时间、澳大利亚/堪培拉、墨西哥/一般、以色列、加拿大/东部、等/GMT+9、加拿大/中部、澳大利亚/北部

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

4

1 回答 1

1

使用纯 CLDR 数据:

  • 检查/common/bcp47/timezone.xml文件中的区域。

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

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

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

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

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

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

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

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

      • DST 过渡日期一致,但古巴在午夜而不是凌晨 2 点过渡
    • 不可映射区域的示例: Australia/Lord_Howe

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

于 2015-07-23T18:05:19.003 回答