为什么这两个时间(1927年)相减会得到一个奇怪的结果?
本文于2203天之前发表,文中内容可能已经过时。
问题描述
如果我运行如下的程序,将两个相距一秒的日期解析成字符串并比较他们。
1 | public static void main(String[] args) throws ParseException { |
输出结果为:
1 | 353 |
为什么ld4-ld3
不是1
(正如我所期望的那样),而是353
?
如果我把时间改变为之后的一秒:
1 | String str3 = "1927-12-31 23:54:08"; |
这时,ld4-ld3
的结果为1
.
java版本:
1 | java version "1.6.0_22" |
时区:
1 | sun.util.calendar.ZoneInfo[id="Asia/Shanghai", |
问题回答
这是因为1927年11月31日上海的时区改变了。
观看此页获得更多关于上海1927年的细节。
这个问题主要是由于在1927年12月31日的午夜,时钟回调了5分钟零52秒。
所以”1927-12-31 23:54:08”这个时间实际上发生了两次,看上去java将这个时间解析为之后的那个瞬间。
因此出现了这种差别。
这只是美好但奇怪的世界时区中的一个插曲。
stackoverflow链接:Why is subtracting these two times (in 1927) giving a strange result?