问题描述:
页面获取的日期,无法查询或者存储到数据库;
页面获取的格式为“yyyy-MM-dd HH:mm:ss”,数据库数据类型为datetime(“yyyy-MM-dd HH:mm:ss”);
方法:
虽然看起来一样,但是是不兼容的,可以通过format函数将获取的date转化为string类型,再转化为date,就可以存储或查询了;
public void find(Date date1) { SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date1str = sdft.format(date1); //若date1是"yyyy-MM-dd"格式,则 //date1str=date1str+" 00:00:00"; Date idate = null; try { idate = sdft.parse(date1str); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // String hql = "from Info i where i.idate = ?"; List<Info> list = this.getHibernateTemplate().find(hql,idate); }问题描述:
举例,用户提交2020-06-30 09:00:00的查询时间点,需要返回时间在"2020-06-29 09:00:00-2020-06-30 09:00:00(含)"这一时间段中的所有信息;
方法:
hibernate中的criteria限定条件查询;
Restrictions.gt("idate", from), 取大于from(Date)的时间
Restrictions.le("idate",to),取小于等于to(Date) 的时间
public List<Info> findByDate(Date date) { Date date1 = date; long oneDayTime = 1000*3600*24; // 这个date2就是减1天的时间 Date date2 = new Date(date1.getTime() - oneDayTime); SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date1str = sdft.format(date1); String date2str = sdft.format(date2); System.out.println(date1str); System.out.println(date2str); Date from=null; Date to=null; try { from = sdft.parse(date2str); to = sdft.parse(date1str); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } DetachedCriteria criteria = DetachedCriteria.forClass(Info.class); criteria.add( // 与条件 Restrictions.and( // 取大于 Restrictions.gt("idate", from), // 取小于等于less than or equal Restrictions.le("idate",to) )); List<Info> list = this.getHibernateTemplate().findByCriteria( criteria); return list; }