美文网首页
Mysql自动加1秒的问题

Mysql自动加1秒的问题

作者: 冰__羽 | 来源:发表于2020-03-23 16:05 被阅读0次

    我们需要根据日期入参,保存数据库该日期的当天最后时刻。
    如2020-03-20,那么我们希望插入数据库的值为2020-03-20 23:59:59,下面是工具类,希望调用getDayStart()方法达成我们的目标。

    public class PointTime {
    
        Date rawDate;
    
        public PointTime(Date rawDate) {
            super();
            this.rawDate = rawDate;
        }
    
        public Date getDayStart() {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(rawDate);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            return calendar.getTime();
        }
    
        public Date getDayEnd() {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(rawDate);
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
            calendar.set(Calendar.MILLISECOND, 999);
            return calendar.getTime();
        }
    }
    

    程序跑出来的结果没有问题,但是当插入数据库时,却变成了2020-03-21 00:00:00,数据库类型字段是datatime。

    原因是Mysql会进行数据转换,它没有毫秒格式,所以当毫秒数>=500时,会进位。[Mysql官方解释]https://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-conversion.html

    时间转换

    我们把毫秒设置成0就行了。

    calendar.set(Calendar.MILLISECOND, 0);
     
    

    相关文章

      网友评论

          本文标题:Mysql自动加1秒的问题

          本文链接:https://www.haomeiwen.com/subject/qqmwyhtx.html