一.日期转换--接收日期与数据库存储不兼容问题
问题描述:
页面获取的日期,无法查询或者存储到数据库;
页面获取的格式为“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 blocke.printStackTrace();}//String hql = "from Info i where i.idate = ?";List<Info> list = this.getHibernateTemplate().find(hql,idate);}
二.时间段查询
问题描述:
举例,用户提交-06-30 09:00:00的查询时间点,需要返回时间在"-06-29 09:00:00--06-3009: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 blocke.printStackTrace();}DetachedCriteria criteria = DetachedCriteria.forClass(Info.class);criteria.add(// 与条件Restrictions.and(// 取大于Restrictions.gt("idate", from),// 取小于等于less than or equalRestrictions.le("idate",to)));List<Info> list = this.getHibernateTemplate().findByCriteria(criteria);return list;}