web-dev-qa-db-ja.com

Java.util.Date(year、month、day)を置き換えるために受け入れられている方法は何ですか

私は本当に簡単なことをしようとしていますが、Javaの日付は地雷原のビットであることに気づき始めています。私が欲しいのは、3つの整数(年、月)のグループを渡すことだけです。と日付)いくつかのDateオブジェクトを作成し、それらに対して簡単なテストを行い(日付Aの前、日付Bの前、1990年1月1日以降)、それらを_Java.sql.Date_オブジェクトに変換して渡しますJDBCを介してデータベースにオフにします。

すべて非常に単純で、Java.util.Date(int year,int month,int day)コンストラクターを使用して正常に動作します。もちろん、そのコンストラクターは減価償却されており、私が書いている新しいコードで減価償却された呼び出しを使用しないようにしたいと思います。ただし、この単純な問題を解決するための他のすべてのオプションは、愚かに複雑に見えます。減価償却されたコンストラクタを使用せずに、私がやりたいことを簡単に行う方法は本当にありませんか?

すべてのJava=日付関連の質問に対する標準的な答えは「ジョダ時間を使用する」ですが、そのような一見些細な問題のためにサードパーティのライブラリを取り入れ始めたくありません。

29
dagw

アイデアは Calendar クラスを次のように使用することです:

Calendar cal = Calendar.getInstance();
cal.set(year, month, date);
Date date = cal.getTime();

確かに、あなたが言及している constructor のJavadocを確認すると、それはまさに提案されているものです。

Date(int year, int month, int date)
          Deprecated. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date).

または... JodaTime :-)を使用します。

41
João Silva

さて、廃止されたコンストラクタを使用できます。 13年以上非推奨であり、現在も機能しています。どこにも行きません。それをしたくなく、サードパーティのライブラリを使用したくない場合は、カレンダーを使用する必要があります。

Java 7では、うまくいけば新しいtime APIが存在し、サードパーティのAPIはもう必要ありません。

4
Yishai

LGの回答は有効ですが、一般的に、すべての日付操作にはCalendarを使用し、APIで明示的に要求されない限り、Dateは省略してください。その場合は、APIに渡すときに変換できます。

1
artgon