java中的时区陷阱

    选择打赏方式

今天碰到一个很奇怪的问题,就是在调用SimpleDateFormat类的parse方法,得到了意外的结果。



public static void main(String[] args) throws ParseException {
    SimpleDateFormat format1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    SimpleDateFormat format2=new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(format2.parse("1990-04-15"));
    System.out.println(format1.parse("1990-04-15 00:00:00.000"));
    System.out.println(format2.parse("1990-04-16"));
    System.out.println(format1.parse("1990-04-16 00:00:00.000"));
}
得到的结果是这样的:
Sun Apr 15 01:00:00 CDT 1990
Sun Apr 15 01:00:00 CDT 1990
Mon Apr 16 00:00:00 CDT 1990

Mon Apr 16 00:00:00 CDT 1990


15日的0点消失了,找了好久都没找到问题。最终发现这和时区有关。


1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时 整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。1992年4月5日后不再实行。


至此,发现中国时区和+8时区是不一样的。所以在系统启动时设置默认时区是非常有必要的。

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));




WRITTEN BY

avatar
版权声明:若无特殊注明,本文皆为《 iasuna 》原创,转载请保留文章出处。
本文链接:java中的时区陷阱 http://www.iasuna.com/post-29.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!