一、问题产生的背景
中间件:tomcat6
jdk:1.6
框架:springmvc + ibatis2
今天在做程序的时候,在前台录入了一个1986-05-04在后台总是报错,其它时间都没有问题,错误如下:rejected value [1986-05-04]。
二、问题原因排查
1、首先可以确定不是框架配置导致的问题,因为其它时间都没有问题
2、通过单元测试转化该日期和其它日期看看转化的结果有没有什么差异
测试代码:
运行结果如下:
3、原因分析
通过以上的测试我们发现,两个日期最终转化出的结果不一致,在1986-05-04转化的时候,后面的时分秒并不是我们期望的00:00:00,而是01:00:00。这就说明日期不能转化成年月日,那么导致这一问题的主要原因可能就是时区问题了,于是我们试着修改了一下运行时的时区,结果运行正确。
三、问题解决
1、以run configurations的方式运行,然后选择Arguments,在VM arguments中输入
-Duser.timezone="Etc/GMT-8"
2、如果要修改tomcat,可以在catalina中配置JAVA_OPT="-Duser.timezone=Etc/GMT-8"
四、参考文档:
http://xuyifeng1111.blog.163.com/blog/static/140894623201491509265/
中间件:tomcat6
jdk:1.6
框架:springmvc + ibatis2
今天在做程序的时候,在前台录入了一个1986-05-04在后台总是报错,其它时间都没有问题,错误如下:rejected value [1986-05-04]。
二、问题原因排查
1、首先可以确定不是框架配置导致的问题,因为其它时间都没有问题
2、通过单元测试转化该日期和其它日期看看转化的结果有没有什么差异
测试代码:
- @Test
- public void testDate() throws ParseException {
- String str = "1986-05-04";
- String str2 = "1986-05-06";
- Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
- Date date2 = new SimpleDateFormat("yyyy-MM-dd").parse(str2);
- System.out.println(date);
- System.out.println(date2);
- }
运行结果如下:
- Sun May 04 01:00:00 CDT 1986
- Tue May 06 00:00:00 CDT 1986
3、原因分析
通过以上的测试我们发现,两个日期最终转化出的结果不一致,在1986-05-04转化的时候,后面的时分秒并不是我们期望的00:00:00,而是01:00:00。这就说明日期不能转化成年月日,那么导致这一问题的主要原因可能就是时区问题了,于是我们试着修改了一下运行时的时区,结果运行正确。
- Sun May 04 00:00:00 GMT+08:00 1986
- Tue May 06 00:00:00 GMT+08:00 1986
三、问题解决
1、以run configurations的方式运行,然后选择Arguments,在VM arguments中输入
-Duser.timezone="Etc/GMT-8"
2、如果要修改tomcat,可以在catalina中配置JAVA_OPT="-Duser.timezone=Etc/GMT-8"
四、参考文档:
http://xuyifeng1111.blog.163.com/blog/static/140894623201491509265/