日付がJavaで有効かどうかをチェックする方法
Javaでは、http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html[SimpleDateFormat]クラスを使用して、指定された日付が有効かどうかを確認できます。
1. DateValidatorの例
package com.mkyong.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateValidator { public boolean isThisDateValid(String dateToValidate, String dateFromat){ if(dateToValidate == null){ return false; } SimpleDateFormat sdf = new SimpleDateFormat(dateFromat); sdf.setLenient(false); try { //if not valid, it will throw ParseException Date date = sdf.parse(dateToValidate); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); return false; } return true; } }
デフォルトでは、 `SimpleDateFormat.setLenient()`はtrueに設定されています。日付検証をより厳密にするために、常にオフにする必要があります。
ユニットテスト
すべての単体テストケースが渡されます。
package com.mkyong.test; import org.junit.** ; import com.mkyong.date.DateValidator; import static org.junit.Assert.** ; public class DateValidatorTest { private DateValidator dateValidator; @Before public void init() { dateValidator = new DateValidator(); } @Test public void testDateIsNull() { assertFalse(dateValidator.isThisDateValid(null, "dd/MM/yyyy")); } @Test public void testDayIsInvalid() { assertFalse(dateValidator.isThisDateValid("32/02/2012", "dd/MM/yyyy")); } @Test public void testMonthIsInvalid() { assertFalse(dateValidator.isThisDateValid("31/20/2012", "dd/MM/yyyy")); } @Test public void testYearIsInvalid() { assertFalse(dateValidator.isThisDateValid("31/20/19991", "dd/MM/yyyy")); } @Test public void testDateFormatIsInvalid() { assertFalse(dateValidator.isThisDateValid("2012/02/20", "dd/MM/yyyy")); } @Test public void testDateFeb29__2012() { assertTrue(dateValidator.isThisDateValid("29/02/2012", "dd/MM/yyyy")); } @Test public void testDateFeb29__2011() { assertFalse(dateValidator.isThisDateValid("29/02/2011", "dd/MM/yyyy")); } @Test public void testDateFeb28() { assertTrue(dateValidator.isThisDateValid("28/02/2011", "dd/MM/yyyy")); } @Test public void testDateIsValid__1() { assertTrue(dateValidator.isThisDateValid("31/01/2012", "dd/MM/yyyy")); } @Test public void testDateIsValid__2() { assertTrue(dateValidator.isThisDateValid("30/04/2012", "dd/MM/yyyy")); } @Test public void testDateIsValid__3() { assertTrue(dateValidator.isThisDateValid("31/05/2012", "dd/MM/yyyy")); } }
参考文献
-
link://正規表現/正規表現付きの日付の確認方法/[Date
Javaでの検証(正規表現の例)]。
http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
[SimpleDateFormat
JavaDoc]
リンク://タグ/日付/[日付]リンク://タグ/java/[java]