Javaで日付が有効かどうかを確認する方法
Javaでは、SimpleDateFormatクラスを使用して、指定された日付が有効かどうかを確認できます。
1. DateValidatorの例
package com.example.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に設定されています。日付の検証をより厳密にするには、常にオフにする必要があります。
2. 単体テスト
すべてのユニットテストケースに合格しました。
package com.example.test;
import org.junit.*;
import com.example.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"));
}
}