17

私のデータベースの日付は2012-04-09 04:02:53 2012-04-09 04:04:51 2012-04-08 04:04:51などです。日付フィールドに現在の日付があるデータを取得する必要があります。つまり、一致する必要があるのは2012-04-09'. 休止状態の基準を使用してそれを行うにはどうすればよいですか。

4

8 に答える 8

30

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));
于 2012-04-09T13:42:21.393 に答える
2

このような?

criteria.add(Expression.eq("yourDate", aDate))
于 2012-04-09T13:44:31.607 に答える
2
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 に設定する必要はありませんでした。私が問題をどのように解決したか、私の頭から離れた例です!多分それは助けます

于 2013-08-22T10:03:03.477 に答える
1

最も簡単な方法は、特定の日の開始から終了までの日付を持つすべてのレコードを取得することです。

WHERE date BETWEEN :from AND :to

そして、あなたの Java コードでfromandを計算します。to

真夜中の計算:

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);
于 2012-04-09T13:36:28.077 に答える
1

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();
于 2012-04-09T13:42:47.447 に答える
0
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()));
于 2013-04-23T10:40:47.723 に答える
0

// 日時比較 Hibernate 4.3

     Select c from Customer c where c.date<{d '2000-01-01'}
于 2018-12-06T21:37:37.020 に答える
0
Restrictions.between("dateColumn", midnight1, midnight2)
于 2012-04-09T13:39:34.747 に答える