『漫游』酷论坛>『漫游水世界』>在cnBeta看到Freewind君引 ..

在cnBeta看到Freewind君引发的一场讨论

ghjconan@2011-08-12 19:03

引用

http://www.cnbeta.com/articles/151499.htm
新闻来源:煎蛋
虽说是程序员问的,不过内容和编程本身其实并没什么太大关系,请各位听我细细道来。StackOverflow是一个程序员向的问答网站,广大程序员们在上面交流经验、提问答疑,三天前,一位名叫Freewind的用户发布了下面这个问题:

我在用Java编写一段比较两个字符串时间间隔的程序,然而当我比较“1927-12-31 23:54:07”和“1927-12-31 23:54:08”这两个时间时,输出结果却不是1……而是353。

当我把两个时间分别往后调整1秒,变成“1927-12-31 23:54:08”和“1927-12-31 23:54:09”,结果就又是1了!——可为什么那两个时间的结果,却是353呢?


面对这一诡异的问题,网友们很快追问,“你的区域(Locale)设置是什么?这可能是个区域问题/和当地夏令时之类的东西有关。”

楼主很快附上了Java版本号和区域设置:


sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
offset=28800000,dstSavings=0,
useDaylight=false,
transitions=19,
lastRule=null]


(……没错,Freewind君,似乎是一位魔都死程。不知道这里有没有人认识这位老兄?)

在这份追加信息出现仅仅两分钟之后,StackOverflow站上的问答狂人Jon Skeet给出了如下答复——


这是因为上海的时区在12月31日发生了变化。
请看这里 。(网页截图如下)



简单地说,在1927年末的最后那一个午夜,时钟被往回拨了5分52秒。所以“1927-12-31 23:54:08”这一秒,事实上,发生了两次,而看起来在计算当地时间时,Java将其视为了后面那一个时间点,于是就产生了这一差别。

这正是时区世界的奇妙与不可思议啊。

在StackFlow网民们纷纷膜拜Jon Skeet的神速之时,其他程序员也以测试的方式验证了这一结果的正确——美国时间木有这个问题。看来,当一枚程序员,有时真的需要上通天文、下知地理啊……


看完我只想说程序员不是全知全能的,怎么可能知道爷爷的爷爷那时发生的事情呢
引用

solid snake@2011-08-12 19:13

大学和研究生学得扎实吧。毕竟都是搞研究的。
引用

风车骑士@2011-08-12 20:01

还以为自由风又…
引用

konpal@2011-08-12 20:03

LZ这标题是没错,但是在这个论坛就有点那啥..
引用

风车骑士@2011-08-12 20:16

引用
引用第3楼konpal于2011-08-12 20:03发表的  :
LZ这标题是没错,但是在这个论坛就有点那啥..

我好像转过PPG的新闻
引用

cerberuslegend@2011-08-13 05:25

那调表的人是谁.....
引用

5teven7in@2011-08-13 17:00

还以为在说自由风又怎么了
引用

zkai@2011-08-13 19:56

根本没有人知道吧,程序居然能够这样自动修正?
出BUG都没有办法知道。
引用

贱贱狗@2011-08-13 21:13

这是个好捏他,以后可以制作一个时空跳跃的故事。

话说,这JAVA如何得知1927年12月31日上海时钟倒播的事?程序原代码里应该没可能记入那么多的时间调整信息的,只可能是外来信息源的输入才会这样吧。

果然是需要IBM5100么?
引用


| TOP