关于java:将joda时区映射到windows时区(例如在C#中)

mapping joda timezone to windows timezone (for example in C#)

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

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

然而,它没有几个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/South, US/Eastern, US/Central,
US/Arizona, Australia/Tasmania, NZ, US/Mountain, Australia/Eucla, GMT,
Japan, CAT, Etc/GMT+0, CST, PST, EST, Australia/Canberra,
Mexico/General, Israel, Canada/Eastern, Etc/GMT+9, Canada/Central,
Australia/North

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


使用纯CLDR数据:

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

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

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

    您可以将Australia/Victoria视为第二项,因此它是Australia/Melbourne的别名。请注意,CLDR的规范区域与TZDB的规范定义不完全匹配,因此请使用这些CLDR映射 - 而不是tzdb中的link条目。

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

    1
    2
    <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时区条目。
  • 您的列表中的一些项目(BSTCATCSTPST)是无效的tzdb区域,即使是Joda-Time的列表也是如此。这些可以是缩写或规则名称,但它们不是区域标识符。