[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() 即可解决问题。

浙公网安备 33010602011771号