간단한 문제가 있습니다. 정확하게 "yyyyMMdd"
형식의 Java 문자열을 구문 분석하려고하므로 "19800229"
은 유효한 날짜이지만 "19820229"
은 그렇지 않습니다. 이들은 정상적인 그레고리오 달력의 AD 날짜라고 가정합니다.엄격한 날짜 구문 분석을 위해 새로운 Java 8 DateTimeFormatter 사용
이 문제를 해결하기 위해 새로운 java.time
패키지를 JDK 8에서 사용하려하지만, 기대했던 것보다 더 복잡합니다. 나의 현재 코드는 다음과 같습니다 그러나
private static final DateTimeFormatter FORMAT = DateTimeFormatter
.ofPattern("yyyyMMdd").withChronology(IsoChronology.INSTANCE)
.withResolverStyle(STRICT);
public static LocalDate parse(String yyyyMMdd) {
return LocalDate.parse(yyyyMMdd, FORMAT);
}
, 예 : "19800228"는 이해할 수없는 오류가 나에게 무엇을 생산으로 유효한 날짜를 구문 분석 :
java.time.format.DateTimeParseException: Text '19820228' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=2, DayOfMonth=28, YearOfEra=1982},ISO of type java.time.format.Parsed
가 어떻게 내 간단한 사용 사례를 해결하기 위해 java.time.format.DateTimeFormatter
를 사용합니까 ?
Thanks @Tech Trip. 죄송합니다. 두 가지 경우 모두 2/29를 의미했습니다. 이유는 내가'DateTimeFormatter.BASIC_ISO_DATE'을 피하는 이유는 선택 가능한 부분을 가지고 있기 때문에 파싱 할 수 없기 때문입니다. 옵션 파트가없는 동등한 포맷터를 만들 수 있습니까? – 0xbe5077ed
나는 귀하의 마지막 코멘트를 고려하여 답을 수정했습니다. 한번보세요! – TechTrip
좋으면, @Tech Trip. 그것이 내가 발견 한 것입니다. yyyyMMdd는 대소 문자 문제가 없기 때문에 불필요한 parseCaseInsensitive()를 제거 할 수 있으며, 선택 사항을 시작하지 않기 때문에'startOptional()'을 제거 할 수 있습니다. – 0xbe5077ed