[SPRING] 최대 절전 모드에서 날짜를 비교하는 방법
SPRING최대 절전 모드에서 날짜를 비교하는 방법
내 데이터베이스 날짜는 다음과 같습니다. 2012-04-09 04:02:53 2012-04-09 04:04:51 2012-04-08 04:04:51, etc., 현재 날짜가있는 데이터를 검색해야합니다. 거기에 날짜 필드. 내가 2012-04-09 '와 (과) 일치해야한다는 뜻입니다. 최대 절전 모드를 사용하여 어떻게 할 수 있습니까?
해결법
-
==============================
1.Restrictions.between ()를 사용하여 날짜 열이 '2012-04-09 00:00:00'과 '2012-04-09 23:59:59'사이에있는 where 절을 생성하십시오.
Restrictions.between ()를 사용하여 날짜 열이 '2012-04-09 00:00:00'과 '2012-04-09 23:59:59'사이에있는 where 절을 생성하십시오.
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 속성 이름이지만 실제 열 이름은 아닙니다.
업데이트 : JDK 만 사용하여 현재 날짜의 fromDate 및 toDate를 가져옵니다.
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));
-
==============================
2.이렇게?
이렇게?
criteria.add(Expression.eq("yourDate", aDate))
-
==============================
3.
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 함수 (extract, ...)를 사용하고이 값만 비교합니다. 그러므로 나는 0으로 시간을 설정하지 않아도 위에서 설명한 예외가 발생합니다. 어떻게하면 문제를 해결할 수 있었는지 생각할 수 있습니다. 어쩌면 도움이 될지 모른다.
-
==============================
4.가장 쉬운 방법은 주어진 날짜의 시작과 끝 사이에 날짜가있는 모든 레코드를 가져 오는 것입니다.
가장 쉬운 방법은 주어진 날짜의 시작과 끝 사이에 날짜가있는 모든 레코드를 가져 오는 것입니다.
WHERE date BETWEEN :from AND :to
Java 코드에서 시작하여 끝까지 계산하십시오.
midnight를 계산하는 경우
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);
-
==============================
5.
Restrictions.between("dateColumn", midnight1, midnight2)
-
==============================
6.Hibernate에서이를 수행하는 방법은 이미 언급되었습니다. 예를 들어 다음 aproach를 사용하여 Java 코드에서 Timestamp 객체를 준비 할 수 있습니다.
Hibernate에서이를 수행하는 방법은 이미 언급되었습니다. 예를 들어 다음 aproach를 사용하여 Java 코드에서 Timestamp 객체를 준비 할 수 있습니다.
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();
-
==============================
7.
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()));
-
==============================
8.// datetime 비교 Hibernate 4.3
// datetime 비교 Hibernate 4.3
Select c from Customer c where c.date<{d '2000-01-01'}
from https://stackoverflow.com/questions/10073893/how-to-compare-dates-in-hibernate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Hibernate는 객체를 영속화하는 동안 잘못 인코딩합니다 [UTF-8] (0) | 2019.01.20 |
---|---|
[SPRING] 누락 된 이슈 javax.transaction : jta : jar : 1.0.1B (해상도가 다를 수 있으므로 문제가 다름) (0) | 2019.01.20 |
[SPRING] 선택적 스프링 빈 참조 (0) | 2019.01.20 |
[SPRING] java.lang.IncompatibleClassChangeError : Mongo 클래스 구현 (0) | 2019.01.20 |
[SPRING] java.lang.ClassNotFoundException : org.hibernate.ejb.HibernatePersistence (0) | 2019.01.20 |