我有一个 shell 脚本(准确地说是 zsh),它使用
strftime "%I:%M %p %Z (%a, %b %d)" "$EPOCHSECONDS"
生成“当前时间”,例如
“中部标准时间 02:45 PM(3 月 1 日星期四)”
这需要能够显示几个不同的美国时区的时间,因此我一直使用“美国/东部”、“美国/中部”和“美国/太平洋”,如下所示:
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 不喜欢它们,还是每个人都在远离它们?
Olson 数据库中命名时区的标准格式是大陆/城市。您提到的“旧”名称(例如 US/Eastern、US/Central 等)在 tzdata 源发行版中列为向后兼容链接(在文件“backward”中)。根据文件顶部的注释,这些名称可能在 1993 年末已成为向后兼容链接。
我想我记得读过这个标准被采用是因为它被认为更稳定:地缘政治(国家)边界发生变化,城市永远不会移动。也许还因为像“东部”和“中部”这样的名字被认为更容易混淆,因为它们意味着世界不同地区的不同时区。但是,我目前找不到任何有关命名原理的参考资料,因此请不要引用我的观点。
最好使用大陆/城市风格的名称。请注意,像 Debian 和 Ubuntu 这样的操作系统会要求您使用这些名称选择系统时区(除非它们在安装时自动检测),使用这些名称您实际上并不需要,正如您所说,“知道哪个城市位于which TZ" 因为城市名称是时区名称的一部分!因此,如果您碰巧学习了大陆/城市名称而不是国家/地区名称,或者除了国家/地区名称之外,您已经没问题了。
话虽这么说,我不认为这些名字会消失。在时区邮件列表中,它们绝对总是被称为“向后兼容性”,而不是“已弃用”,并且无论 PHP 有何建议,它们都打算保留。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)