首页 > 解决方案 > 为什么 DateTimeZone :: listAbbreviations() 和 DateTimeZone :: listIdentifiers () 之间存在不同的时区

问题描述

我想获取所有时区的列表。

当我使用时DateTimeZone::listIdentifiers() ,我会得到一个列表,

当我使用时,DateTimeZone::listAbbreviations()我会得到一个包含不同条目的列表。

每个列表都有不在第二个列表中的值。如何获得完整的清单?

为什么这两个功能有区别?

标签: phpdatetimetimezone

解决方案


标识符和缩写是不同的东西,因此您会得到不同的列表。

标识符绑定到一个位置,因此单个时区(中欧时间)通常与多个标识符(欧洲/马德里、欧洲/巴黎、欧洲/柏林...)相关,并且一个相同的标识符可以切换时区(欧洲/马德里是欧洲中部时间,UTC+1,冬季和欧洲中部夏令时间,UTC+2,夏季)。

缩写与时区绑定,因此单个缩写 (CET) 仅映射到一个时区(中欧时间,UTC+1)。

如果您检查DateTimeZone::listAbbreviations())的输出,您会看到每个时区缩写都包含其已知位置标识符的列表,并且它们不是唯一的,因为它们中的许多会由于夏令时或政治变化而切换时区。


推荐阅读