我们需要根据日期入参,保存数据库该日期的当天最后时刻。
如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);