문제

좋은가요? 엄격한 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 유효한 날짜인지 아닌지를 식별하기 위해 예외에 의존 할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top