На моей дате создания базы данных 2012-04-09 04:02:53
2012-04-09 04:04:51
2012-04-08 04:04:51
и т. Д. Мне нужно получить данные с текущей датой в поле даты. Я имею в виду, мне нужно соответствовать только 2012-04-09'
. Как я могу это сделать, используя критерии спящего режима.Как сравнить даты в hibernate
ответ
Использование Restrictions.between() для генерации где предложение, которое столбец даты находится между '2012-04-09 00:00:00' и «2012-04-09 23:59:59'
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fromDate = df.parse("2012-04-09 00:00:00");
Date toDate = df.parse("2012-04-09 23:59:59");
criteria.add(Restrictions.between("dateField", fromDate, toDate));
Пожалуйста, обратите внимание, что все свойства, используемые в Criteria API является имя свойства Java, но не фактическое имя столбца.
Обновление: Получить FromDate и Todate на текущую дату с использованием JDK только
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date fromDate = calendar.getTime();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date toDate = calendar.getTime();
criteria.add(Restrictions.between("dateField", fromDate, toDate));
Самый простой способ, чтобы извлечь все записи с даты между началом и концом данного дня:
WHERE date BETWEEN :from AND :to
И вычислить from
и to
в коде Java.
для вычисления Midnights:
import static org.apache.commons.lang.time.DateUtils.ceiling;
import static org.apache.commons.lang.time.DateUtils.truncate;
Date someDay = new Date();
Date from = truncate(someDay, Calendar.DAY_OF_MONTH);
Date to = new Date(ceiling(someDay, Calendar.DAY_OF_MONTH).getTime() - 1);
Restrictions.between("dateColumn", midnight1, midnight2)
Как-сделать это в Hibernate уже было сказано. Вы можете подготовить Timestamp
объекты в коде Java, используя, например, следующий ПОДХОД:
Calendar cFrom = Calendar.getInstance();
cFrom.setTime(new Date()); /* today */
cFrom.set(Calendar.HOUR_OF_DAY, 0);
cFrom.set(Calendar.MINUTE, 0);
cFrom.set(Calendar.SECOND, 0);
cFrom.set(Calendar.MILLISECOND, 0);
Timestamp from = new Timestamp(cFrom.getTime().getTime());
Calendar cTo = Calendar.getInstance();
cTo.setTime(new Date()); /* today */
cTo.set(Calendar.HOUR_OF_DAY, 23);
cTo.set(Calendar.MINUTE, 59);
cTo.set(Calendar.SECOND, 59);
cTo.set(Calendar.MILLISECOND, 999);
Timestamp to = new Timestamp(cTo.getTime().getTime());
final String QUERY = ""
+ "SELECT tr "
+ "FROM Type tr "
+ "WHERE tr.timestamp >= :timestampFrom AND tr.timestamp <= :timestampTo";
Query query = entityManager.createQuery(QUERY);
query.setParameter("timestampFrom", from);
query.setParameter("timestampTo", to);
@SuppressWarnings("unchecked")
List<Type> ts = (List<Type>)query.getResultList();
обычный способ – Akhilesh
как это?
criteria.add(Expression.eq("yourDate", aDate))
это не сделает точное совпадение ?? 2012-04-09 wil не дает 2012-04-09 04:02:53 ??? – Romi
Как насчет использования выражения Expression.between («yourDate», aDate, aDate + 1) – titogeo
Это не сработало для меня, я думаю, что он делает точный выбор, лучший случай сравнить даты - это первый ответ. –
The following code will work
Calendar fromDate = Calendar.getInstance();
fromDate.setTime(new Date());
fromDate.set(Calendar.HOUR_OF_DAY, 0);
fromDate.set(Calendar.MINUTE, 0);
fromDate.set(Calendar.SECOND, 0);
fromDate.set(Calendar.MILLISECOND, 0);
Calendar toDate = Calendar.getInstance();
toDate.setTime(new Date());
toDate.set(Calendar.HOUR_OF_DAY, 23);
toDate.set(Calendar.MINUTE, 59);
toDate.set(Calendar.SECOND, 59);
toDate.set(Calendar.MILLISECOND, 999);
criteria.add(Restrictions.between("loadDate", fromDate.getTime(),
toDate.getTime()));
fromDate.setTime(new Date());
fromDate.set(Calendar.HOUR_OF_DAY, 0);
fromDate.set(Calendar.MINUTE, 0);
fromDate.set(Calendar.SECOND, 0);
fromDate.set(Calendar.MILLISECOND, 0);
Этот код является чрезвычайно опасно ... если день переход на летнее время (например, 06.04.1980), вы в конечном итоге в следующем исключение !!!
java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1day
HQL: from human pat where year(pat.birthdate) = :start_day and month(pat.birthdate) = :start_month and year(pat.birthdate) = :start_year ");
params.put("start_day", startDate.get(Calendar.DAY_OF_MONTH));
params.put("start_month", startDate.get(Calendar.MONTH) + 1);
params.put("start_year", startDate.get(Calendar.YEAR));
год/месяц/день функции использовать основные функции Db (экстракт, ...) и сравнивает только эти значения. Поэтому мне не нужно было устанавливать время на 0, что приводит к описанному выше исключению. просто пример из моего ума, как я решил проблему! Может быть, это помогает
- 1. Как сравнить формат даты
- 2. Как сравнить даты строк?
- 3. Как сравнить две даты
- 4. Как сравнить две даты?
- 5. Как сравнить даты в Django
- 6. Как сравнить даты в php?
- 7. Как сравнить даты в C++
- 8. Как сравнить даты в Stata?
- 9. Как сравнить даты в XSLT
- 10. Как сравнить даты в LINQ?
- 11. Как сравнить даты в PHP?
- 12. Как сравнить даты в iReport?
- 13. Как сравнить даты в Rails?
- 14. Как сравнить даты в Java?
- 15. Как сравнить даты в HQL?
- 16. Как сравнить даты в валидации?
- 17. Как сравнить даты в solr?
- 18. Как сравнить даты в Javascript?
- 19. Как сравнить даты в javascript?
- 20. Как сравнить даты в sqlalchemy?
- 21. Как сравнить даты в iReport?
- 22. Как сравнить даты в JavaScript
- 23. Как сравнить две даты?
- 24. Как сравнить даты XSL
- 25. сравнить даты в asp.net
- 26. Сравнить даты в Swift
- 27. Сравнить даты в CodeIgniter
- 28. Формат даты сравнить даты XSLT
- 29. Как правильно сравнить две даты?
- 30. JPA: Как сравнить две даты
Как получить fromDate и toDate от Currentdate – Romi
@Romi: см. Мои обновления –
@Ken Chan Спасибо большое, что вы отправили дату сравнения одной даты. Я дам вам +1 для '23: 59: 59' в методе анализа. – OO7