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