随手小记:为何没有asia/beijing时区?

郑昀@玩聚SR 20090116

引子

@WebLeOn对时区问题发出了疑问:

Asia/Beijing 这个时区是消失了么? 大约1小时 ago

@tinyfool 对啊,我就奇怪为什么北京时间就要用上海和成都。。。 大约1小时 ago

@tinyfool @CatChen 我所疑惑的就是为什么不统一一下呢,很容易产生困惑噢 大约1小时 ago

开发者都知道

想必做开发的,尤其是PHP或Java的,很多年前就都会注意到这个情况:时区中没有asia/beijing,只有asia/shanghai和asia/chongqing。以前看到不少这种抱怨的帖子,毕竟和心理预期不一样,还会导致程序出错或程序员浪费时间调试。大家会猜测这是不是老外故意和北京捣乱。我认为不是。

投诉BUG

有国人愤而投诉Ubuntu

for i'm from P.R.China and BeiJing is our capital city, we are always using BeiJing time zone. please fix it.

甚至投诉Sun说“The Time Zone id name for PRC is wrong”:

it is better if there exists a id name as "Asia/Beijing" for PRC.
Ubuntu认为:首先这个问题不归他。其次维护这个将会是易错的,而且容易与其他软件不兼容。
Sun的回答是“It is not wrong”。对他给出的理由,还是有说服力的:

首先,我想确认这一点在JDK诞生之前,国际标准时区就没有Asia/Beijing,只有Asia/Shanghai或Asia/Chongqing?(One thing I want to be confirmed here is, before JDK's birth, the international standard TimeZone name for PRC is Asia/Shanghai or Asia/Irkutsk? not Asia/Beijing?)

其次,在1986年到1991年期间,中华人民共和国采用了夏时制。为了能够处理任何给定的时间格式,时区就需要知道是否历史上使用夏令时。daylight就是表明这一点的字段。因此,在JDK中使用daylight字段是不对的。

但根据他后面说的,我认为sun似乎有必要更改时区,毕竟sun认为时区的api应该支持同时代的时区。Asia/Shanghai和Asia/Chongqing代表中国,都是国民党时期的老黄历了:

sun的策略是只支持同时代(contemporary)的时区,而不是历史上(historical)的某一个时区。TimeZone和DateFormat code只应该对于当前的时区工作。最后,Fixed in JDK1.2 FCS-M, but the value is Asia/Shanghai, better one is Asia/Beijing.

小结
anyway,有没有asia/beijing时区,开发都没影响,保持各种系统和软件的兼容可能更重要吧。
谁知道更多呢?请留言。
posted @ 2009-01-16 15:48  旁观者  阅读(...)  评论(...编辑  收藏