奥尔森时区到窗口



我需要在窗口中将时区从奥尔森时区转换。使用PHP。

我找到了这个 http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml

使用这些数据进行转换似乎并不难。

但是有问题:

1( 我可以信任这个来源吗?

2( 如何解析具有多值的类型:

<mapZone other="Eastern Standard Time" territory="US" type="America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville"/>

按空格字符划分?

  • 美洲/New_York
  • 美洲/底特律
  • 美洲/印第安纳州/彼得堡
  • 美洲/印第安纳州/文森斯
  • 美洲/印第安纳州/维纳马克
  • 美洲/肯塔基州/蒙蒂塞洛
  • 美洲/路易斯维尔

但是为什么有些区域有三个组成部分呢?

3(转换奥尔森时区时总是在那里=>Windows时区将只接收1个时区或更多?在这种情况下该怎么办?

4(有什么陷阱吗?例如 UTC。

是的,您可以信任该来源,它确实是用于此类转换的最佳来源。 我使用相同的数据来实现 .NET 的转换函数。

既然你的问题是关于PHP的,我会认为这不是一个重复的问题 - 尽管我很好奇你为什么要在PHP中这样做,因为PHP使用IANA/Olson时区,即使在Windows上也是如此。

Windows 时区往往比 IANA 时区宽,从而解释了为什么映射中存在多个值。 该列表确实用空格分隔,CLDR 规范要求列表中的第一个条目是 CLDR 的规范引用。

为什么某些区域有三个组件与 CLDR 无关,但这些实际上是原始区域标识符。 维基百科有一个很好的解释。

从Olson

到Windows只有一个标识符 - 但不一定从Windows到Olson。

是的,还有更多陷阱:

  • 并非所有 IANA/Olson 区域都可以映射到 Windows 区域 ID。 示例:America/Atikokan

  • CLDR 和 IANA 在规范性方面存在分歧。 CLDR 规范 ID 永远不会更改,而 IANA 规范 ID 确实可以更改,用链接替换以前的 ID。 这使得从奥尔森映射到Windows有点困难,因为您必须检查所有链接。

    例如,印度在CLDR中Asia/Calcutta。 它已在 IANA tzdb 中更新为 Asia/Kolkata - 将Asia/Calcutta替换为链接。 要将Asia/Kolkata映射到Windows"印度标准时间",您必须根据映射检查区域的所有链接。

  • CLDR将Windows"UTC"区域映射到"Etc/GMT"。 IANA 将Etc/UTC(和其他缩写(视为一个单独的区域,而不是一个链接。 因此,您必须手动处理这些。

相关内容

  • 没有找到相关文章

最新更新