读书人

SimpleDateFormat使用不当罗致时间错乱

发布时间: 2012-09-01 09:33:03 作者: rapoo

SimpleDateFormat使用不当导致时间错乱

近期一个老项目发现导入数据(节目单),存在时间错乱的问题。节目单来自文件,文件格式大概:

中央五套.txt

?

?

?

而上面的parse(source,pos)则是使用实现类的方法,这里即SimpleDateFormat.parse(source,pos)方法,它的代码就不贴了,但可以明显的发现SimpleDateFormat继承自DateFormat的Calendar calendar,在private int subParse(String text, int start, int patternCharIndex, int count,

? ? ? ? ? ? ? ? ? ? ? ? ?boolean obeyCount, boolean[] ambiguousYear,

? ? ? ? ? ? ? ? ? ? ? ? ?ParsePosition origPos) 方法中,会解析传入的source,并依次将解析出的yyyy,MM,dd,HH,mm,ss设置到calendar中,由于calendar在这是实例变量,所以在多线程的情况下就会造成数据串的情况,接下来写个测试类来模拟:

?

?

?

?

运行代码后,基本都能重现几十次并发问题,如下(部分)运行结果:

?

2:  原:2012-02-02 12:12:12  新:2012-02-30 12:12:121:  原:2012-03-30 12:12:12  新:2012-03-02 12:12:1220:  原:2012-02-02 12:12:12  新:2012-02-30 12:12:1217:  原:2012-03-30 12:12:12  新:2012-03-02 12:12:1248:  原:2012-02-02 12:12:12  新:2012-02-30 12:12:1242:  原:2012-02-02 12:12:12  新:2012-02-30 12:12:1240:  原:2012-02-02 12:12:12  新:2012-02-30 12:12:1234:  原:2012-02-02 12:12:12  新:2012-02-30 12:12:12
?

?

如上,就出现了2012-02-30 这样错误的时间。

?

?

?

读书人网 >编程

热点推荐