6

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

今日発生したすべてを選択するクエリDateの真夜中の今日に設定する必要があります。HQL

現在私は使用しています:

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

5 に答える 5

8

注: この回答は Java 8 以降では正確ではない可能性が高く、現在はより優れた日付/カレンダー APIがあります。

標準的な代替手段は、Calendarオブジェクトを使用することです。

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

Calendarライブラリを追加せずに利用できるという利点があり、広く理解されています。また、Javadocの文書化された代替手段でもあります。Date

のドキュメントはCalendarここにあります: Javadoc

Calendar(不注意な人にとって) 危険な点が 1 つあります。それはafter/beforeメソッドです。を受け取りますが、オブジェクトObjectのみCalendarを正しく処理します。これらのメソッドを使用する前に、Javadoc をよく読んでください。

1 日を追加する ( ) や、1 週間を「スクロール」する ( ) などCalendar、さまざまな方法でオブジェクトを変換できます。全体像を把握するには、Javadoc のクラスの説明を読んでください。cal.add(Calendar.DAY_OF_YEAR, 1);cal.roll(Calendar.DAY_OF_WEEK, 1);

于 2013-09-23T11:53:36.283 に答える
2

最良の代替手段は、Joda Time APIを使用することです:

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

非推奨になることを避けるにはDateMidnight:

Date date = new DateTime().withMillisOfDay(0).toDate();
于 2013-09-23T11:55:24.873 に答える
0

Date は国際化を適切に処理しないため、廃止されました。

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

最も簡単な代替手段は、java.util.Calendar代わりに使用することです。

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

そして calendar.set(...) メソッドを呼び出します。

于 2013-09-23T12:01:44.860 に答える