2013-09-23 16 views
5

現在、廃止予定のsetメソッドjava.util.Dateを使用しています。私はそれから離れて移動したいので、どのような選択肢があり、どのような利点がありますか?java.util.Dateの代替手段

Dateは、今日起きたことすべてを選択するHQLクエリの今日、真夜中に設定する必要があります。

は、現在、私が使用します。

Date startingDate = new Date(); 
startingDate.setHours(0); 
startingDate.setMinutes(0); 
startingDate.setSeconds(0); 
+2

javadocを読んでください...明らかに、 'Calendar.set'メソッドは置換されています – sanbhat

+0

もっと抽象的な記述があれば、より直接的なアドバイスが可能です。 –

+0

私は、これらの日付変数をHibernateクエリで使用して、午前12:00から同じ日に作成されたレコードを検索しています。 –

答えて

7

注:この答えは、もはや正確なJavaの8のために以降は、今better date/calendar APIがある可能性が高いです。

標準代替品はCalendarオブジェクトを使用しています。

Calendar cal = Calendar.getInstance(); // that is NOW for the timezone configured on the computer. 
cal.set(Calendar.HOUR, 0); 
cal.set(Calendar.MINUTES, 0); 
cal.set(Calendar.SECONDS, 0); 
Date startingDate = cal.getTime(); 

Calendar追加のライブラリなしで来るという利点があり、広く理解されています。 Javadoc

Calendarは(不注意のために)1つの危険なポイントを持っており、それがafter/before方法である:それはまたCalendarのドキュメントはここで見つけることができますDate

Javadocから文書化代替手段です。彼らはObjectを受け取りますが、Calendarのオブジェクトだけが正しく処理されます。これらのメソッドについては、使用する前にJavadocをよくお読みください。

Calendarオブジェクトをある日(cal.add(Calendar.DAY_OF_YEAR, 1);)または「スクロール」を週(cal.roll(Calendar.DAY_OF_WEEK, 1);)などのように変換することができます。 Javadocでクラスの説明を読んで完全な画像を取得してください。

Date date = new DateMidnight().toDate();  // today at 00:00 

に-ことDateMidnight廃止予定のないようにするには:

+2

そしてそこに '#set'メソッドがあります:http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int、int、int、int、int、int) – RJo

3

最善の選択肢はJoda Time APIを使用することです

Date date = new DateTime().withMillisOfDay(0).toDate(); 
+0

OPがJodaと言ったことをする方法を示すコードを追加できますか? –

+0

DateMidnight()は最新のjodaビルドでは非推奨です –

+0

そうです。私の編集を参照してください:) –

0

あなたはジョダライブラリをさかのぼり使用することを、あなたは柔軟性の多くを得るだろうそれ。それ以外の場合は、カスタム日付の作成にjava.util.Calendarを使用できます。

0

日は、それが廃止されました理由です、適切に国際化を処理しません。

JDK 1.1以前では、クラスDateには2つの追加機能がありました。 は、年、月、日、時、分、 および第2の値として日付の解釈を許可しました。また、日付の書式設定と解析を可能にしました 文字列。残念ながら、これらの関数のAPIは国際化のために に対応していませんでした。 JDK 1以降。1の場合、Calendarクラスは で日付フィールドと時刻フィールドの間の変換に使用され、DateFormatクラス は日付文字列のフォーマットと解析に使用する必要があります。 Dateの対応する メソッドは非推奨です。

最も簡単な選択肢ではなくjava.util.Calendarを使用することです:

Calendar calendar = Calendar.getInstance(); // get a calendar instance (current) 

とコール calendar.set(...)メソッド。