问题
在做日期时间范围查询时,需要查询当天时间范围内的数据,如2021-01-05这天的所有记录,
查询时间范围应该是“2021-01-05 00:00:00”至“2021-01-05 23:59:59”之间的数据,若数据库日期格式是timestamp则需要更精确到毫秒,如“2021-01-05 23:59:59.254”。
此时已经不适用add_time>=“2021-01-05 00:00:00” and add_time<=“2021-01-05 23:59:59”的where查询条件了,而且组合起来也有点麻烦。
我们用add_time>=“2021-01-05” and add_time<“2021-01-06” 这样查询更科学,后面不需要带时间,系统或默认从当天最小时间开始。
解决方案
String add_timeA='2021-01-05' ;//起始时间 若传入日期时间格式 '2021-01-05 10:02:11' 也会被转换成yyyy-MM-dd格式
String A_new=Comm.getDateYMDstr(add_timeA);//输出为 '2021-01-05'
String add_timeB='2021-01-05' ;//截止时间
//自增一天,输出为 '2021-01-06'
String B_new=Comm.getDateYMDaddDays(Comm.getDate(add_timeB),1);
//传入到sql语句中使用 注意后面的截止时间要用小于号
//select * from 表 where add_time>=A_new and add_time<B_new
//即 select * from 表 where add_time>='2021-01-05' and add_time<'2021-01-06'
以上使用到的公用方法如下:
// 转换为yyyyMMdd日期格式字符串 public static String getDateYMDstr(String dateStr) { try { return getDateYMD(DateFormat.getDateInstance().parse(dateStr)); } catch (ParseException e) { e.printStackTrace(); return ""; } }
//String转为Date yyyy-MM-dd格式 public static Date getDate(String dateStr) { SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); Date dt = null; try { dt = sf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return dt; }
// 日期加减天数 public static String getDateYMDaddDays(Date date, Integer days) { try { Calendar c = Calendar.getInstance(); c.setTime(date); // 设置当前日期 c.add(Calendar.DATE, days); // 日期加1天 date = c.getTime(); return new SimpleDateFormat("yyyyMMdd").format(c.getTime()); } catch (Exception e) { e.printStackTrace(); } return null; }
手记:
//起始日期 String add_timeA= Comm.getString(map.get("add_timeA")); if(!Comm.IsNullOrEmpty(add_timeA)){ map.put("add_time_MoreEqual",Comm.getDateYMDstr(add_timeA)); } //截止日期 String add_timeB= Comm.getString(map.get("add_timeB")); if(!Comm.IsNullOrEmpty(add_timeB)){ map.put("add_time_Less",Comm.getDateYMDaddDays(Comm.getDate(add_timeB),1)); }