一、问题产生的背景
中间件: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/
分享到:
相关推荐
java 将excel里面的数字时间转化为准确的时间格式;具体来源有点忘记了,实现是摘自了开源代码里面的一段。
Java 时间转化工具类
JAVA提供了方便的时间转换API 获取当前时间返回String类型格式yyyy-MM-ddDate转字符串 及字符串转Date
java formt 时间日期格式 比较详细 希望对大家有帮助 pdf格式的 比较清晰
java编程中String类型时间转化成Date类型
讲述了java时间类型的转化,String long date 间的转化
java将数字转换为时间格式,好方法,可以看看
在C#中如何将object转化为时间类型
java8 localtime 毫秒与时间互转 获取前一天六点钟时间
java中各种时间格式的转化要点.pdf
支持Fri Feb 02 18:18:49 CST 2018转为date和2018-01-30 22:22:24,以及2018-01-30 22:22:24转date
JAVA获取当前时间并转换成string格式
java list<bean> date.class如果日期类型就改成这个 日期时间格式转换
java时间差java时间差java时间差java时间差
java中常用的时间操作;如日期,时间戳,日历,字符串相互转化;时间差等常用日期功能。
Java DateUtil.java日期时间操作类源代码,DateUtil类包含了标准的时间和日期格式,以及这些格式在字符串及日期之间转换的方法。比如日期格式转换成时间戳、得到格式化后的系统当前日期、转化日期格式"MM/dd/YY、MM....
Java中的日期转化格式DateUtil工具类
java 获取指定日期(带毫秒)的 13位时间戳 ,获取当前时间的时间戳 一句话就可以System.currentTimeMillis();
史上最全日期类型转化,包括各种形式的日期转化,时间转化。并可以获取当前年份,月份,以及当前星期等。可以获取过去的时间时间,小时,分钟数等。
可以实现各种时间格式的转换,完美解决时间与字符串的问题!