Calendar计算出一个月后1天的23点59分59秒,但是减1毫秒后,存入数据库的数据没有减的问题。

昨天遇到的一个问题,要根据当前时间计算出一个月后的某一天,推后一天的23点59分59秒,在测试类进行测试的时候没有任何问题,代码如下:

    public Date getTheLastTime(Date date){
        Calendar calendar = Calendar. getInstance();
        calendar.setTime(date);
        calendar.set(Calendar. HOUR_OF_DAY, 0);
        calendar.set(Calendar. MINUTE, 0);
        calendar.set(Calendar. SECOND, 0);
        calendar.set(Calendar. MILLISECOND, -1);
        calendar.add(Calendar. DAY_OF_MONTH, 1);
        return calendar.getTime();
    }
 
    @Test
    public void monthLaterTest(){
        long nowTime = System.currentTimeMillis();
        long day2Sss = 30L * 24 * 60 * 60 *1000;
        long newTime = nowTime + day2Sss;
        System.out.println(getTheLastTime(time2Date(newTime)));
    }

举例来说今天是 2018-6-29 11:41:52,我需要生成的时间就是 2018-7-30 23:59:59,测试类结果如下:

Mon Jul 30 23:59:59 CST 2018

没有任何问题,但是布到项目中执行,存入数据库的结果却成了 2018-7-31 0:00:00。

这是因为MySQL默认存储datetime是精确到秒的,所以减掉一个毫秒之后存入MySQL,MySQL并不care。

于是将减1毫秒改成减1秒,就好了:

public Date getTheLastTime(Date date){
        Calendar calendar = Calendar. getInstance();
        calendar.setTime(date);
        calendar.set(Calendar. HOUR_OF_DAY, 0);
        calendar.set(Calendar. MINUTE, 0);
        calendar.set(Calendar. SECOND, -1);
        calendar.set(Calendar. MILLISECOND, 0);
        calendar.add(Calendar. DAY_OF_MONTH, 1);
        return calendar.getTime();
}

如果想让MySQL精确到毫秒,可以将数据库中的时间字段类型长度设置为3。

如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,添加博主微信哦。 请下方留言吧,可与博主自由讨论哦。

支付宝 微信
Calendar计算出一个月后1天的23点59分59秒,但是减1毫秒后,存入数据库的数据没有减的问题。_第1张图片
支付宝
Calendar计算出一个月后1天的23点59分59秒,但是减1毫秒后,存入数据库的数据没有减的问题。_第2张图片
微信

你可能感兴趣的:(Calendar计算出一个月后1天的23点59分59秒,但是减1毫秒后,存入数据库的数据没有减的问题。)