【问题标题】:mapping joda timezone to windows timezone (for example in C#)将 joda 时区映射到 Windows 时区(例如在 C# 中)
【发布时间】:2015-10-12 05:57:05
【问题描述】:

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

我使用CLDR mappings的xml,它适用于大部分翻译。

尽管如此,它没有几个 joda 时区的值:

America/Indiana/Indianapolis、BST、Australia/Victoria、Universal、 澳大利亚/新南威尔士州、美国/Fort_Wayne、非洲/阿斯马拉、 美国/肯塔基州/路易斯维尔,亚洲/喀什,美国/太平洋,澳大利亚/西部, 澳大利亚/昆士兰、澳大利亚/南部、美国/东部、美国/中部、 美国/亚利桑那、澳大利亚/塔斯马尼亚、新西兰、美国/山区、澳大利亚/欧克拉、格林威治标准时间、 日本、CAT、Etc/GMT+0、CST、PST、EST、澳大利亚/堪培拉、 墨西哥/通用、以色列、加拿大/东部、等/GMT+9、加拿大/中部、 澳大利亚/北部

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

【问题讨论】:

  • 您是否正在寻找有关如何使用 cldr 和 tzdb 源映射那些的解释?还是您在寻找C# code to do the translation
  • 我正在寻找一种方法来映射所有 joda 时区,包括问题中的时区。可能类似于 CLDR,但包括缺少的 joda 时区(CLDR 没有指定 joda 时区的映射)....

标签: java c# timezone jodatime cldr


【解决方案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 映射 - 而不是来自 tzdb 的 link 条目。

  • 现在检查/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 时区条目。
  • 您的列表中有一些项目(BSTCATCSTPST)不是有效的 tzdb 区域,即使是 Joda-Time's list。这些可以是缩写或规则名称,但它们不是区域标识符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多