mybatis datetime 毫秒问题

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
// 将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
// 将分钟至0
calendar.set(Calendar.MINUTE, 0);
// 将秒至0
calendar.set(Calendar.SECOND, 0);
Date timestamp = calendar.getTime();
Map params = ContentValues.obtain().put("timestamp",timestamp).getValues();
List> records= recordMapper.queryRecordsByTimestamp(parmas);

@Query("select id,name,size from t_opration_recoreds where timestamp >= #{timestamp}")
List> queryRecordsByTimestamp(Map paramMap);

上面的代码逻辑为查询昨天和今天的操作记录  看起来没有任何问题 查询结果可能也没问题 

但当有数据timestamp是昨天0点0分0秒0毫秒时 而calendar是01毫秒时创建的 那这条数据时查询不出来的  因为mybatis参数是date时 毫秒是会参与比较的 以下为查询时mybatis的日志

- ==>Preparing: select id,name,size from t_opration_recoreds where timestamp >= ?
- ==> Parameters: 2020-03-23 00:00:00.135(Timestamp)
- <==      Total: 2822

timestamp的cdate.toString为 2020-03-23T08:00:00.135+0800

然而实际条数是2823条 查看日志发现timestamp为2020-03-23 00:00:00.135 日期里有毫秒  而记录的timestamp为2020-03-23 00:00:00  肯定查询不到

解决办法

//方式一
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
// 将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
// 将分钟至0
calendar.set(Calendar.MINUTE, 0);
// 将秒至0
calendar.set(Calendar.SECOND, 0);
//毫秒至0
calendar.set(Calendar.MILLISECOND,0);

//方式二  共用考虑线程安全
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2020-03-23");

 

你可能感兴趣的:(JAVA)