java无法转化时间问题

一、问题产生的背景 

中间件:tomcat6 
jdk:1.6 
框架:springmvc + ibatis2 

今天在做程序的时候,在前台录入了一个1986-05-04在后台总是报错,其它时间都没有问题,错误如下:rejected value [1986-05-04]。 

二、问题原因排查 

1、首先可以确定不是框架配置导致的问题,因为其它时间都没有问题 

2、通过单元测试转化该日期和其它日期看看转化的结果有没有什么差异 

测试代码: 

Java代码 
  1. @Test  
  2. public void testDate() throws ParseException {  
  3.     String str = "1986-05-04";  
  4.     String str2 = "1986-05-06";  
  5.     Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str);  
  6.     Date date2 = new SimpleDateFormat("yyyy-MM-dd").parse(str2);  
  7.     System.out.println(date);  
  8.     System.out.println(date2);  
  9. }  


运行结果如下: 
Java代码 
  1. Sun May 04 01:00:00 CDT 1986  
  2. Tue May 06 00:00:00 CDT 1986  


3、原因分析 

通过以上的测试我们发现,两个日期最终转化出的结果不一致,在1986-05-04转化的时候,后面的时分秒并不是我们期望的00:00:00,而是01:00:00。这就说明日期不能转化成年月日,那么导致这一问题的主要原因可能就是时区问题了,于是我们试着修改了一下运行时的时区,结果运行正确。 

Java代码 
  1. Sun May 04 00:00:00 GMT+08:00 1986  
  2. 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/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值