发布于2020-11-14 09:11 阅读(1245) 评论(0) 点赞(12) 收藏(5)
如果我运行以下程序,则该程序将分析两个日期字符串(相隔1秒),并对其进行比较:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str3 = "1927-12-31 23:54:07";
String str4 = "1927-12-31 23:54:08";
Date sDt3 = sf.parse(str3);
Date sDt4 = sf.parse(str4);
long ld3 = sDt3.getTime() /1000;
long ld4 = sDt4.getTime() /1000;
System.out.println(ld4-ld3);
}
输出为:
353
为什么ld4-ld3
不是,1
(不是我希望从一秒钟的时间差中得出),而是353
为什么?
如果我将日期更改为1秒后的时间:
String str3 = "1927-12-31 23:54:08";
String str4 = "1927-12-31 23:54:09";
然后ld4-ld3
将1
。
Java版本:
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Dynamic Code Evolution Client VM (build 0.2-b02-internal, 19.0-b04-internal, mixed mode)
Timezone(`TimeZone.getDefault()`):
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
offset=28800000,dstSavings=0,
useDaylight=false,
transitions=19,
lastRule=null]
Locale(Locale.getDefault()): zh_CN
这是12月31日在上海的时区更改。
有关1927年上海的详细信息,请参见此页。基本上在1927年底的午夜,时钟回到了5分52秒。因此,“ 1927-12-31 23:54:08”实际上发生了两次,看起来Java正在将其解析为该本地日期/时间的稍后可能时刻,因此有所不同。
在时区通常又怪异而精彩的世界中,又是另一集。
编辑:停止按!历史发生变化...
如果使用TZDB的2013a版本进行重建,原始问题将不再表现出完全相同的行为。在2013a中,结果为358秒,转换时间为23:54:03,而不是23:54:08。
我之所以注意到这一点,是因为我在Noda Time中以单元测试的形式收集了类似的问题……测试现已更改,但它只是显示出来-甚至历史数据也不安全。
编辑:历史再次改变了...
在TZDB 2014F,变化的时间已经转移到1900年12月31日,它现在是一个单纯的343秒变化(这样的时间t
和t+1
有344秒,如果你明白我的意思)。
编辑:要回答有关1900年过渡的问题...看起来Java时区实现将所有时区都视为在1900 UTC开始之前的任何时刻都处于其标准时间内:
import java.util.TimeZone;
public class Test {
public static void main(String[] args) throws Exception {
long startOf1900Utc = -2208988800000L;
for (String id : TimeZone.getAvailableIDs()) {
TimeZone zone = TimeZone.getTimeZone(id);
if (zone.getRawOffset() != zone.getOffset(startOf1900Utc - 1)) {
System.out.println(id);
}
}
}
}
上面的代码在Windows计算机上不产生任何输出。因此,任何在1900年初具有除标准偏移量之外的偏移量的时区都将被视为过渡。TZDB本身具有一些早于此的数据,并且不依赖于任何“固定的”标准时间的想法(getRawOffset
假定这是一个有效的概念),因此其他库不需要引入这种人为的转换。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/497/21baf46e7d8e882230fd/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!