为什么当天的时间格式化后却变为昨天的时间

阅读更多
问题场景:

生产环境程序运行过程中,统计数据不正确,查看日志发现一个固定的配置在数据库中的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.检查代码:跟踪源码



你可能感兴趣的:(date)