2013-07-02 11 views
7

年月日を設定するにはカレンダーメソッドを使用したいが、日付が無効な場合は何らかの指示が必要。カレンダーを使用して日付が有効かどうかを確認

calendar.set(2013,Calendar.JANUARY , 23) //is a valid date 
calendar.set(2013,Calendar.JANUARY , 33) //is not 

私はcalendar.setLenient(false)を設定し、1月の第33に値を設定すると例外をスローすると予想、しかし、それはしませんでした。

答えて

8

チェックを遅延行われているようだ:

非寛大GregorianCalendarを任意の範囲外のフィールド値が設定されている場合その時間やカレンダフィールド値を計算時に例外がスローされます。

Calendar c = new GregorianCalendar(); 
c.setLenient(false); 
c.set(2013, Calendar.JANUARY, 33); 
c.getTime(); 

でもないgetTimeなし:

は、これはあなたに例外がスローされます。

+0

+1正確に正しい。 CalendarがJDKの中で最も壊れたクラスであるという多くの理由の1つです。 (JodaTimeを使用してください!) – Bohemian

3

レンダンシーは、カレンダーが範囲外の日付を受け入れるかどうかを制御するだけです。寛容が設定されている場合、Javaは範囲外の日付を調整するために数学を行います(たとえば、2013-12-32は2014-01-01になります)。 leniencyが設定されていない場合、Javaはこれを許可しませんが、実際にフィールドの一部を要求するまで範囲外のデータはチェックしません。 Javadocsから:

非厳密GregorianCalendarを任意の範囲外のフィールド値が設定されている場合その時間又はカレンダフィールド値を算出時に例外をスローします。その後、あなたの質問に

私はこれをどのように扱うのですか?

あなたは月の最初にカレンダーを設定できます。

calendar.set(2013, Calendar.JANUARY, 1); 

、その後

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 

を起動し、あなたの毎日の値と比較。あなたの日の価値が範囲内にあれば、あなたは進めることができます。

関連する問題