生产环境程序运行过程中,统计数据不正确,查看日志发现一个固定的配置在数据库中的Date数据,在运行时被格式为其前一天的数据了
问题分析:
1.问题代码
DateUtil.format(Date,"yyyy-MM-dd");
2.本地测试
本地调用重新测试,发现问题,当天的时间被调用此方法后变为昨天的时间了,导致数据统计不正常
3.后来发现包路径不对,此方法不是工程的工具类
DateUtils
编码过程中少敲了一个s 却调用到了相同的方法,而测试过程中,没有对时间进行严格的测试
4.分析问题
DateUtil 是 org.apache.commons.httpclient.util 包下的工具类
public static String formatDate(Date date, String pattern) { if (date == null) throw new IllegalArgumentException("date is null"); if (pattern == null) throw new IllegalArgumentException("pattern is null"); SimpleDateFormat formatter = new SimpleDateFormat(pattern, Locale.US); formatter.setTimeZone(GMT); return formatter.format(date); }
调用该方法的执行流程如下:
从表中获取Date类型数据,根据当前的时间 中国东八时区
然后格式时间,setTimeZone设置时区,需要减去8个小时
即实际格式化后的数值与理论上差了8个小时
问题总结:
1.细心:项目中使用的工具类均是以utils结尾
2.检查代码:跟踪源码