问题产生
测试人员反馈,数据库表中的时间比传入的时间多了1秒。
比如传的是 2021-04-13 10:00:00,但实际落库数据是 2021-04-13 10:00:01
问题定位
先查看了下数据,确实多了1秒。
本地跑了下单测,也复现了。
百度了下,说是mysql版本 5.6 以上,会将 datetime 类型的数据自动进行四舍五入。
用 select @@version 命令查看了下公司用的mysql版本,是5.7,基本可以确定是这个问题。
问题解决
测试使用的时间工具类是这样的:
public static Date timeOfDate(Integer hour, Integer min, Integer second) {
Calender c = Calender.getInstance();
c.setTime(new Date());
c.set(Calender.HOUR_OF_DAY, hour);
c.set(Calender.MINUTE, min);
c.set(Calender.SECOND, second);
return c.getTime();
}
在结果 return 之前,设置毫秒数为0,让 datatime 类型无法进位,从而解决 datetime 类型存储时间不精确问题。
c.set(Calendar.MILLISECOND, 0);
提交代码,验证通过