时间存入MySQL,莫名增加了一秒钟

    科技2022-07-10  92

    1.场景再现

    MySQL(用的8.0.16版)中列的数据类型是 datetime,成功插入记录后,根据插入的时间有时候查不到对应的记录。

    插入的SQL语句如下,看时间的变化。

    ==> Preparing: INSERT INTO tb_contest_conclusion ( id,user_id,create_time,finish_time ) VALUES( ?,?,?,? ) ==> Parameters: null, 1(Long), 2020-10-03 14:36:26.499(Timestamp), 2020-10-03 14:36:26.739(Timestamp) <== Updates: 1

    数据库中插入的记录如下。

    2.问题排查

    MySQL中当插入的时间的毫秒数大于等于500时,实际保存到数据库的时候就会自动增加一秒,有点类似四舍五入的感觉。

    3.问题解决

    对症下药:插入时间前,将时间的毫秒值统一设置为0即可。使用JDK中的日历类Calendar来实现。

    这个功能要多次用到,写个工具类吧。

    package util; import java.util.Calendar; import java.util.Date; /** * @Description 精确的时间工具类 * @Author DongPo */ public class PreciseTimeUtil { /** * 设置时间的毫秒值为0 * * @param date * @return */ public static Date getPreciseTime(Date date) { // 日历对象 Calendar c = Calendar.getInstance(); // 设置时间 c.setTime(date); // 设置毫秒值为0 c.set(Calendar.MILLISECOND, 0); return c.getTime(); } }
    Processed: 0.094, SQL: 8