Mysql中TIMESTAMP时间进位问题

一 SQL

Preparing: INSERT INTO user (start_time,create_time) VALUES ( ?, ? ) 
Parameters: 2021-07-23T11:25:49.737(LocalDateTime),2021-07-23T11:25:49.737(LocalDateTime)

        分析:可以看到日志中的start_time,create_time都是带有毫秒的。

        但是进入数据库之后时间就发生了进位,毫秒值没有了且秒的值加1。这是因为TIMESTAMP类型的时间当毫秒数超过500时存入数据库就会发生进位。

二 Java时间不会进位

 /**
     * 日期格式化 日期格式为:yyyy-MM-dd
     *
     * @param date    日期
     * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN
     * @return 返回yyyy-MM-dd格式日期
     */
public static String format(Date date, String pattern) {
        if (date != null) {
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            return df.format(date);
        }
        return null;
    }

public static String today(String pattern) {
        Date date = new Date();
        if (pattern == null) {
            pattern = STANDARD_FORMAT;
        }
        if (!pattern.equals(STANDARD_FORMAT) && !pattern.equals(DATE_PATTERN)) {
            return StringUtils.EMPTY;
        }
        return format(date, pattern);
    }

String nowTime = DateTimeUtil.today("yyyy-MM-dd HH:mm:ss");

        nowTime = “2021-07-23 11:25:49”,此时通过一下方式查询就会出一个问题

QueryWrapper queryWrapper = new QueryWrapper<UserEntity>()
                .le("start_time", nowTime) // 开始时间 <= 当前时间
                .ge("end_time", nowTime);   // 结束时间 >= 当前时间

        当入库时间的毫秒数小于500可以查到,当毫秒数超过500时由于发生进位导致查询失败。

问题如此,暂时没有很好的解决方法,如有好方法,欢迎留言指教。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值