分类: C/C++
2008-07-18 09:28:39
研究PHP生成RSS2.0文件时,我发现利用阅读工具浏览时总是有时间不对的问题CST这个时区究竟 代表了什么?在一台 Linux 系统里运行 date 命令可以得到这种格式的时间: "Wed Dec 7 14:15:22 CST 2005". 搜索 CST, 可以发现它竟同时代表了四个时区:
CST Central Standard Time (USA) UT-6:00 //美国中部时间
CST Central Standard Time (Australia) UT+9:30 //澳大利亚时间
CST China Standard Time UT+8:00 //北京时间
CST Cuba Standard Time UT-4:00 //古巴时间
系统怎么知道这个 CST 代表哪一个时区呢? --- 是通过 /etc/localtime 这个链接指向的时区文件. 不信的话可以试试把 localtime 链接到同样是 CST 的另一个时区:
ln -sf /usr/share/zoneinfo/America/Regina /etc/localtime
之后再执行 date 会得到一个与北京时间相差 14 小时的时间, 但还是写着 CST.
有意思的是, 某些应用程序并不检测系统的 localtime, 比如 PHP. 可以做这样一个试验:
php -r "echo (strtotime('CST') - strtotime('GMT')) / 3600;"
PHP 把这个 CST 当作 Central Standard Time (USA) UT-6:00 来算.
另外, 现在流行的 RSS 2.0 也是这样. 在 pubDate 标签的定义 中时间的语法使用 , 而 CST 在 rfc822 中只代表 Central: -6.
GNU 建议我们不要使用这种 , 更合适的是 .