날짜의 "간단한"구문 분석을 구현하는 데 문제가 있습니다. 요구 사항은 연도를 2 자리 또는 4 자리로 허용하는 것입니다. 두 자릿수를 입력하면 내년 1 월 1 일에 어느 세기에 속하는지 결정하기위한 분리 날짜를 만듭니다. 다음은 내가 지금까지 가지고있는 것입니다 :pivotYear가 2 자리 연도로 설정된 여러 형식의 날짜 구문
DateTime now = new DateTime();
int pivotYear = now.getYear() - 49; // 2013 - 49 = 1964 where 49 is the
DateTimeParser[] parsers = {
DateTimeFormat.forPattern("dd/MM/yy").withPivotYear(pivotYear).withLocale(new Locale("en", "NZ")).getParser(),
DateTimeFormat.forPattern("dd/MM/yyyy").withLocale(new Locale("en", "NZ")).getParser()
};
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, parsers).toFormatter();
DateMidnight birthDate = new DateMidnight(formatter.parseDateTime(dateOfBirth));
불행히도 내가 기대하는 바가 없습니다. 오늘 날짜 (2012 년 11 월 4 일) 및 dateOfBirth = "01/01/14"
에 대해 2014-01-01T00:00:00.000+13:00
을 반환한다고 가정 해 보겠습니다. 나는 내가 서식 API의 낮은 수준의 일부
그래서 나는프린터 및 파서 인터페이스이 문장을 볼 수있는 JavaDoc for the append method 볼 때 예상되는 결과는
1914-01-01T00:00:00.000+13:00
될 것이다. 일반적으로 인스턴스는 다른 포맷터에서 추출됩니다. 그러나 로케일, 표준 시간대, 연대순, 오프셋 구문 분석 또는 피벗/기본값 연도와 같은 형식 지정자 특정 정보 (예 : )는이 방법으로 추출되지 않습니다.
DateTimeParser[] parsers = { DateTimeFormat.forPattern("dd/MM/yy").getParser(), DateTimeFormat.forPattern("dd/MM/yyyy").getParser() }; DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, parsers).appendTwoDigitYear(pivotYear).toFormatter().withLocale(new Locale("en", "NZ"));
을 Unfortunatelly이 문제가 정렬되지 않은 : 이제 코드는 다음과 같습니다 있도록
DateTimeFormatterBuilder
클래스로 피벗 물건을 이동하기로 결정했습니다. 오히려 그것은
java.lang.IllegalArgumentException가에 이번에 실패 : 잘못된 형식 "01/01/14"는 org.joda.time.format.DateTimeFormatter.parseDateTime에서 너무 짧은 (DateTimeFormatter.java를 : 866) 나는이 문장
을 얻을 같은 자바 독에서
는 프린터와 일치 파서 세트를 추가합니다. 구문 분석 할 때 목록의 첫 번째 구문 분석기가 구문 분석을 위해 선택됩니다. 실패하면 다음이 선택됩니다. 이들 파서 중 어느 것도 성공하지 못하면 가장 큰 진전을 낸 파서의 실패 위치가 반환됩니다.
이것을 바탕으로 첫 번째 파서가 작업을 선택해야하지만 두 번째 파서가 트리거 된 것으로 보이며 더 긴 연도가 예상되므로 실패합니다.
모든 도움을 주시면 감사하겠습니다. 건배 토마스
나는 비슷한 문제에 봉착하지만 해결책은 이상한, 나를 위해 작동하는 표시되지 않습니다. 나는 그것에 대해 새로운 질문을 열어야했다. http://stackoverflow.com/questions/19143817/joda-time-parsing-two-digit-year-correctly-based-on-pivot – Neeko