今天在帮助同事查找一个项目bug的时候发现一个很奇怪的问题,一个字符串经过给定的一个format进行转换后变成了另外一个日期,原来是format串用错了,将'yyyy-MM-dd'错误的写成了'yyyy-mm-dd',format的结果也就自然而然错误,测试代码如下:
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
long time = format.parse("2012-09-05").getTime();
System.out.println(time);
System.out.println(new Date(time));
format = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");
time = format.parse("2012-01-05 00:05:00").getTime();
System.out.println(time);
System.out.println(new Date(time));
输出结果如下:
1325693340000
Thu Jan 05 00:09:00 CST 2012
1336147260000
Sat May 05 00:01:00 CST 2012
简单的解释一下原因,我们知道,yyyy代表年,MM代表月,dd代表天,HH代表小时,mm代表分钟,ss代表秒,SimpleDateFormat应该是根据传入的值和初始化时候的format串进行匹配,所有第一个2012-09-05,转换的结果就成了yyyy(2012) MM(没有给,默认值为01),dd(05), HH(00),mm(09),ss(00),所以自然而然的就成了 2012-01-05.
关于第二个,输入的时间是2012-01-05 00:05:00,映射的结果为: yyyy(2012), mm(01),dd(05),HH(00),MM(01),ss(05),所有应该就变成了 2012-05-05 00:01:00了。
这个由于并不报错,这种错误有时候的潜伏期也比较长。
分享到:
相关推荐
SimpleDateFormat使用详解。非常实用!!!!
java 使用SimpleDateFormat类获取系统的当前时间 java 使用SimpleDateFormat类获取系统的当前时间
有关SimpleDateFormat的常用方法说明
JavaScript实现的java.text.SimpleDateFormat。希望多多交流。
日期操作。。。基础的SimpleDateFormat格式化日期!!操作!》初级学习代码
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date.setTime(time); System.out.println(sdf.format(date)); 发现时间于想要的时间不符,请运行Time.reg文件
Java 实例 - 格式化时间SimpleDateFormat使用源代码-详细教程.zip
由浅入深解析 SimpleDateFormat 由浅入深解析 SimpleDateFormat
目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期转String类型(format)SimpleDateFormat出现bug...ThreadLocal注意事项使用ThreadLocal解决SimpleDateFormat线程安全问题总结...
主要为大家详细介绍了Java中SimpleDateFormat的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。这篇文章主要介绍了Java中的SimpleDateFormat使用详解,需要的朋友可以参考下
高并发之-SimpleDateFormat类的线程安全问题和解决方案.docx
1.创建SimpleDateFormat对象,确定日期被格式化的格式 2.使用循环,在循环中调用Thread的sleep方法,让线程休眠1s后打印当前时间的字符串
深入理解Java:SimpleDateFormat安全的时间格式化
NULL 博文链接:https://qinchaoyong.iteye.com/blog/543109
NULL 博文链接:https://chaoyi.iteye.com/blog/2082317
NULL 博文链接:https://flynndang.iteye.com/blog/711878
主要介绍了java SimpleDateFormat使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
计算机后端-Java-Java核心基础-第22章 常用类 10. SimpleDateFormat的使用.avi
主要介绍了JAVA使用SimpleDateFormat类表示时间代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下