一 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时由于发生进位导致查询失败。
问题如此,暂时没有很好的解决方法,如有好方法,欢迎留言指教。谢谢!