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

问题场景:

生产环境程序运行过程中,统计数据不正确,查看日志发现一个固定的配置在数据库中的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.检查代码:跟踪源码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值