Php 奥尔森时区到windows

Php 奥尔森时区到windows,php,unicode,timezone,iana,Php,Unicode,Timezone,Iana,我需要从windows中的olson时区转换时区。 使用PHP 我找到了这个 使用这些数据进行转换似乎并不困难 但也有一些问题: 1) 我能相信这个消息来源吗 2) 如何分析具有多个值的类型: <mapZone other="Eastern Standard Time" territory="US" type="America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes Amer

我需要从windows中的olson时区转换时区。 使用PHP

我找到了这个

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

但也有一些问题:

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"/>

除以空格字符

  • 美国/纽约
  • 美国/底特律
  • 美国/印第安纳州/彼得堡
  • 美国/印第安纳/文森斯
  • 美国/印第安纳州/维那马克
  • 美国/肯塔基州/蒙蒂塞洛
  • 美国/路易斯维尔
但为什么有些区域有三个组成部分

3) 转换Olson时区时始终存在=>Windows时区将只接收1个或更多时区?在这种情况下该怎么办


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

是的,您可以信任该来源,它确实是用于这种转换的最佳来源。我使用了相同的数据来实现

既然你的问题是关于PHP的,我会认为这不是一个重复的问题——尽管我很好奇为什么你想在PHP中这样做,因为PHP使用IANA /奥尔森时区,甚至在Windows上。 Windows时区往往比IANA时区更宽,因此可以解释为什么映射中存在多个值。该列表确实由空格分隔,CLDR规范要求列表中的第一个条目是CLDR的规范引用

为什么有些区域有三个组件与CLDR无关,但它们实际上是原始区域标识符

从Olson到Windows只有一个标识符,但不一定是从Windows到Olson

是的,还有更多的陷阱:

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

  • CLDR和IANA在什么是规范的问题上存在分歧。CLDR规范id永远不会更改,而IANA规范id确实可以更改,用链接替换以前的id。这使得从Olson映射到Windows有点困难,因为您必须检查所有链接

    例如,印度是CLDR中的
    亚洲/加尔各答
    。IANA tzdb已将其更新为
    Asia/Kolkata
    ——用链接替换
    Asia/Calcutta
    。要将
    Asia/Kolkata
    映射到Windows“印度标准时间”,您必须根据映射检查区域的所有链接

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