日期操作的时候经常会在字符串、毫秒和日期对象间转换,而且很多人都使用joda time库进行操作,这就会遇到以下说的问题(相信很多人也遇到了):就是对于某些特殊的日期,转换的时候会报错,或者出现转换不准确(相差一小时)的问题。
1,字符串转日期,转long
首先,我们先将日期字符串转为日期,再打印出long值,以‘1986-05-04’为例:DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
System.out.println(formatter.parseDateTime("1986-05-04").getMillis());
这时就会出现下面的异常:org.joda.time.IllegalInstantException: Cannot parse "1986-05-04": Illegal instant due to time zone offset transition (Asia/Shanghai)
对于一般的日期字符串这样写并不会报错,这种引起报错的特殊日期还不止一个,比如:1988-04-10,1989-04-16,1990-04-15,1991-04-14等。这其实是时区相关的错误,是夏令时引起的,详情参考http://www.bubuko.com/infodetail-