[JAVA.Bug]使用三方库DateUtils.formatDate (new Date())引起的Bug

问题表现:

此问题出现在一个涉及金融交易非常重要模块上,具体表现为 同时晚上12点会更新数据,但是发现并未生效,此数据生效时间会从当天0点开始,此为表现。

 

原因分析:

到了早上8:30上班,开始分析问题,提取生产Log,调试代码,发现一个奇怪的现象:

SQL中 生效起始日期居然是前一天,但是在代码Debug时又是当天,这里就百思不得其解了,直到翻到了代码

DateUtils.formatDate (new  Date())

问题: 这个类不是我们标准库的类而是apache httpclient中的类, 仔细分析这个类的 formatDate方法,它会以0时区进行格式化,我们服务器时区为+8时区,那问题已经很清晰了,当前格式化的日期其实是减8小时日期

这也佐证了我们在上班时间调试日期又是正确的,上班时间正好是8点以后。

 

解决方案:

解决方案比较容易,由于我们Mybatis已经集成了 JSR310支持,这里并不需要这样多此一举的format 处理,直接传入LocalDate.now() 即可解决问题。

 

posted @ 2020-07-03 21:36  vanlin  阅读(927)  评论(0)    收藏  举报