更新时间:2022-10-18 08:57:55
如果您正在寻找按日期范围过滤(例如从今天到明天)的一般用法。
我这样使用它:
YourService.java
来自Timestamp的日期= new Date();
Date toTimestamp = new Date();
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp);
Date toDate = DateHelper.getDateWithoutTime(DateHelper.getTomorrowDate(toTimestamp));
YourDAO.java
criteria.add(Restrictions.ge(TIMESTAMP_FIELD,fromDate));
criteria.add(Restrictions.le(TIMESTAMP_FIELD,toDate));
DateHelper.java
public static Date getDateWithoutTime(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
返回cal.getTime();
}
public static Date getTomorrowDate(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE,1);
返回cal.getTime();
}
当然 - 每个代码总是有重构空间。
I have timestamp in database and in application i do have date . I like to write hibernate criteria in the way that hibernate can pull all entries those matches with date, not time part. e.g.
in DB timestamp
2011-12-01 15:14:14
and in application i do have java.util.Date which has by default time part.
my problem is when i search entries from database with following code i get nothing
DetachedCriteria criteria = DetachedCriteria.forClass(MyClass.class);
criteria.add(Restrictions.like(TIMESTAMP_FIELD, javaUtilDate));
List entries =this.getHibernateTemplate().findByCriteria(criteria);
thanks in advance
If you are looking for a general use of filtering by date range (eg. from today until tomorrow). I use it that way:
YourService.java
Date fromTimestamp = new Date();
Date toTimestamp = new Date();
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp);
Date toDate = DateHelper.getDateWithoutTime(DateHelper.getTomorrowDate(toTimestamp));
YourDAO.java
criteria.add(Restrictions.ge(TIMESTAMP_FIELD, fromDate));
criteria.add(Restrictions.le(TIMESTAMP_FIELD, toDate));
DateHelper.java
public static Date getDateWithoutTime(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
public static Date getTomorrowDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, 1);
return cal.getTime();
}
And of course - there is always space for refactoring in every code.