记录一个bug,在java中,时间为某一天的 23:59:59,但是插入数据库之后却变成第二天的00:00:00
原因是因为:数据库入库的时候会有500毫秒的进位。
原来的逻辑:
//获取当天最后的时间,精确到秒
public static Date getTodayLastTime2() {
Calendar calendar1 = Calendar.getInstance();
calendar1.set(calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH),
23, 59, 59);
Date endDate = calendar1.getTime();
return endDate;
}
这样生成的时间,毫秒级有50% 的概率会大于500,所以会有出现入库之后,变成第二天的00:00:00.
解决方案:可以设置毫秒级为0,就可以了,如下:
//获取当天最后的时间,精确到秒
public static Date getTodayLastTime2() {
Calendar calendar1 = Calendar.getInstance();
calendar1.set(calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH),
23, 59, 59);
// 防止毫秒级别大于500进位
calendar1.set(Calendar.MILLISECOND,0);
Date endDate = calendar1.getTime();
return endDate;
}
或者采用这样的形式:
//获取当天最后的时间,精确到秒,
public static Date getTodayLastTime() {
return new Date(DateTime.now()
.secondOfDay()
.withMaximumValue()
.millisOfSecond() //防止毫秒级别大于500进位
.withMinimumValue() //防止毫秒级别大于500进位
.getMillis()
);
}