时区 java 巴黎_java中的时区陷阱 - iasuna

今天碰到一个很奇怪的问题,就是在调用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

f6d341e97ae8cf89ccfbc7b467fb82f1.png

java攻城师一只,长年进行各种奇葩需求的实现-___-

版权声明:若无特殊注明,本文皆为《

iasuna 》原创,转载请保留文章出处。

本文链接:java中的时区陷阱 http://www.iasuna.com/post-29.html

正文到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值