问题描述
我在做浏览统计功能,然后要统计当天的数据,利用hutool的dateutil获取当天开始和结束时间,然后保存到数据库,开始时间没问题,但结束时间加了一秒,变成下一天的0点。
Date date = new Date();
Date dayEndTime = DateUtil.endOfDay(date);
// 理论值:2020-12-09 23:59:59
插入数据库的时间多了1秒钟,变成第二天的2020-12-10 00:00:00
问题原因
是因为MySQL数据库对于毫秒大于500(验证版本5.7.11-log 其他会进位的版本没有进行验证)的数据进行进位。
解决办法
- 设置毫秒值为0
calendar.set(Calendar.MILLISECOND,0);
// 2020-12-09 23:59:59
Date date = new Date(System.currentTimeMillis() / 1000 * 1000);
- 设置数据库时间长度为3
- hutool取最后时间拿到的毫秒值都是999,按最后逻辑是没问题的,但数据库如果精度是秒,会自动加一秒,建议改变时间字段精度。