Java에 대한 좋은 * 엄격한 * 날짜 구문 프로그램이 있습니까?
문제
좋은가요? 엄격한 Java의 날짜 파서? Joda-Time에 액세스 할 수 있지만 아직이 옵션을 보지 못했습니다. 나는 "Java에 대한 좋은 날짜 구문 분석기가 있습니까"라는 질문을 발견했으며, 이것은 관련이 있지만 그것은 반대입니다. 그 질문이 관대하고 더 퍼지 로그가 있고 인간 오류 파서가 발생하기 쉬운 것을 요구하는 반면, 나는 엄격한 파서를 원합니다. 예를 들어, Jodatime (내가 알 수있는 한)과 SimpledateFormat을 모두 사용하면 "mm/dd/yyyy"형식이있는 경우 :
이것을 구문 분석 : 40/40/4353
이것은 유효한 날짜가됩니다. 나는 40이 유효하지 않은 달과 날짜라는 것을 알고있는 파서를 원한다. 분명히 이것의 일부 구현은 Java에 존재합니까?
해결책
나는 그것을 보지 못한다 조다 유효한 날짜로 인식합니다. 예시:
strict = org.joda.time.format.DateTimeFormat.forPattern("MM/dd/yyyy")
try {
strict.parseDateTime('40/40/4353')
assert false
} catch (org.joda.time.IllegalFieldValueException e) {
assert 'Cannot parse "40/40/4353": Value 40 for monthOfYear must be in the range [1,12]' == e.message
}
내가 말할 수있는 한 최선을 다해도 마찬가지입니다 날짜 형식 ~와 함께 setLenient (false). 예시:
try {
df = new java.text.SimpleDateFormat('MM/dd/yyyy')
df.setLenient(false)
df.parse('40/40/4353')
assert false
} catch (java.text.ParseException e) {
assert e.message =~ 'Unparseable'
}
도움이 되었기를 바랍니다!
다른 팁
DateFormat을 사용하여 엄격한 검증을하는 좋은 방법은 구문 분석 날짜를 다시 구성하고 평등을 원래 문자열로 확인하는 것입니다.
String myDateString = "87/88/9999";
Date myDate = dateFormat.parse(myDateString);
if (!myDateString.equals(df.format(myDate))){
throw new ParseException();
}
매력처럼 작동합니다.
당신은 사용할 수 있습니다 apache.commons.validator.routines.DateValidator
날짜를 확인하려면 사용하고 싶지 않은 경우 SimpleDateFormat
.
예시 :
public static Date validateDate(String value, String pattern) {
DateValidator validator = new DateValidator();
Date date = null;
if (pattern!=null) { //Pattern is passed
date = validator.validate(value, pattern);
} else {
date = validator.validate(value);
}
return date;
}
그래서 a NULL이 반환됩니다 날짜가 유효하지 않음을 의미합니다. 그렇지 않으면 유효한 날짜입니다.이 방법은 SimpleDateFormat
유효한 날짜인지 아닌지를 식별하기 위해 예외에 의존 할 필요가 없습니다.