今天碰到一个很奇怪的问题,就是在调用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
java攻城师一只,长年进行各种奇葩需求的实现-___-
版权声明:若无特殊注明,本文皆为《
iasuna 》原创,转载请保留文章出处。
本文链接:java中的时区陷阱 http://www.iasuna.com/post-29.html
正文到此结束