복붙노트

[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. ==============================

    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. ==============================

    2.이렇게?

    이렇게?

    criteria.add(Expression.eq("yourDate", aDate))
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.

    Restrictions.between("dateColumn", midnight1, midnight2)
    
  6. ==============================

    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. ==============================

    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. ==============================

    8.// datetime 비교 Hibernate 4.3

    // datetime 비교 Hibernate 4.3

         Select c from Customer c where c.date<{d '2000-01-01'}
    
  9. from https://stackoverflow.com/questions/10073893/how-to-compare-dates-in-hibernate by cc-by-sa and MIT license