date存入mysql中时,莫名其面的加了一秒

问题描述

我在做浏览统计功能,然后要统计当天的数据,利用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 其他会进位的版本没有进行验证)的数据进行进位。

解决办法

  1. 设置毫秒值为0
calendar.set(Calendar.MILLISECOND,0);
// 2020-12-09 23:59:59
Date date = new Date(System.currentTimeMillis() / 1000 * 1000);
  1. 设置数据库时间长度为3
  2. hutool取最后时间拿到的毫秒值都是999,按最后逻辑是没问题的,但数据库如果精度是秒,会自动加一秒,建议改变时间字段精度。
# mysql   sql   navicat  

评论

企鹅群:39438021

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×