2010-08-19 2 views
3

XML 문서의 날짜와 시간을 JodaTime 객체로 구문 분석 할 때 일반적으로 org.joda.time.format.ISODateTimeFormat이 제공하는 파서 및 포맷터를 사용하여 일반적인 변환 유틸리티 집합을 사용합니다.Joda LocalDate에 시간대가있는 xs : date 구문 분석

대부분의 경우에 문제가 없지만 이번에는 xs:date 값이 2010-08-19Z 인 문서가 표시됩니다. 이것은 완벽하게 유효한 xs:date 값이지만, 시도한 파서 인 ISODateTimeFormat-generated LocalDate 파서 중 어느 것도 받아 들일 수 없습니다. 가장 가까운 내가 찾을 수있는 ISODateTimeFormat.dateParser(), 다소 이상한 찾고 2010-08-19TZ지만, 2010-08-19Z (참고 T 참고) 동의합니다.

Joda와 XML 스키마 모두 ISO 날짜/시간 형식 지정 규칙을 엄격히 준수하지만 그 중 하나가 아니거나 사양이 불분명하기 때문에 이는 매우 짜증나게합니다.

패배를 인정하고 사용자 지정 형식을 손으로 찍기 전에 누구나 그 값을 읽을 ISODateTimeFormat-source 파서에서 나를 가리킬 수 있습니까?

답변

1

ISO-8601에 따르면 'Z'는 시간 값의 일부라고 생각합니다. 'T'구분 기호는 결합 된 날짜/시간 값을 만드는 경우에만 사용됩니다. 이것의 엄격한 의미는 'Z'는 비어있을 수있는 시간 값없이 날짜 뒤에 나타날 수 없다는 것을 의미합니다. 따라서 "홀수가 보이는"2010-08-18TZ.

이것은 xs : date와 ISO-8601의 정의 사이에 약간의 임피던스 불일치가있는 것으로 보입니다.

편집 : ISO 8601 사본을 찾았습니다. XML Schema Datatypes 스펙에 정의 된 것과 같은 "시간대 지정 날짜"개념은 정의하지 않습니다.

오히려 처음부터 쓰는 이상의 방법 XS 변환 래퍼 (즉, 단지 'T'를 삽입) ISO-8601 대응하는 값에 일 인스턴스 시간대로를 다음 기존 ISODateTimeFormat.dateParser()를 사용합니까?

+0

그래서 사양이 맞지 않습니다. 위대한 : ( – skaffman

+0

XML 스키마가 오기 훨씬 전에 ISO-8601이 꽤 오래 전에 정의 된 것으로 생각합니다. XML 스키마 스펙만큼 엄격하게 날짜를 생각하지 않았을 것입니다. –