我有一个shell脚本(确切地说是zsh),它使用
strftime "%I:%M %p %Z (%a, %b %d)" "$EPOCHSECONDS"
生成"当前时间",如
"美国中部时间下午02:45(3月1日,星期四)"
这需要能够在几个不同的美国时区显示时间,所以我一直在使用"美国/东部"、"美国/中部"one_answers"美国/太平洋",比如
export TZ='US/Eastern'
strftime "%I:%M %p %Z (%a, %b %d)" "$EPOCHSECONDS"
这似乎很好,我更喜欢使用TZ="American/CityName",因为它不需要我知道哪个城市在哪个TZ,我只需要告诉它我想要哪个TZ。
然而,我偶然遇到http://www.php.net/manual/en/timezones.others.php看到上面写着
请不要使用此处列出的任何时区(UTC除外),它们的存在只是出于向后兼容的原因。
我不知道美国/地区名称有什么问题,但我很想知道在可预见的未来,使用它们是否可能会造成问题,或者它们仍然可以安全使用?是PHP不喜欢它们,还是每个人都在远离它们?
Olson数据库中时区命名的标准格式为Continent/City。您提到的"旧"名称,如美国/东部、美国/中部等,在tzdata源发行版中列为向后兼容性链接(在文件"backward"中)。根据文件顶部的评论,这些名称可能在1993年末成为向后兼容性链接。
我想我记得读到过,之所以采用这个标准,是因为人们觉得它更稳定:地缘政治(国家)边界改变了,城市永远不会移动。也许也是因为像"东方"one_answers"中央"这样的名字被认为更令人困惑,因为它们意味着世界不同地区的不同时区。然而,我目前找不到任何关于命名理由的参考,所以不要引用我的话。
首选大陆/城市风格的名称。注意,像Debian和Ubuntu这样的操作系统会要求你使用这些名称来选择系统时区(除非他们在安装时自动检测到),使用这些名称你就不需要像你说的那样"知道哪个城市在哪个TZ",因为城市名称是时区名称的一部分!因此,如果你碰巧学会了欧洲大陆/城市的名称,而不是国家/地区的名称,或者除了国家/地区名称之外,你已经可以了。
话虽如此,我认为这些名字永远不会消失。在时区邮件列表中,它们肯定总是被称为"向后兼容性",而不是"不推荐使用",并且不管PHP建议如何,它们都会保留下来。