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"));
iasuna 》原创,转载请保留文章出处。
本文链接:java中的时区陷阱 http://www.iasuna.com/post-29.html
版权声明:若无特殊注明,本文皆为《
正文到此结束
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!