Разбор xs: дата с часовым поясом в Joda LocalDate - PullRequest
3 голосов
/ 19 августа 2010

При анализе дат и времени из документов XML в объекты JodaTime я использую общий набор утилит преобразования, обычно с использованием анализаторов и форматеров, предоставляемых org.joda.time.format.ISODateTimeFormat.

В большинстве случаев работает нормально, но на этот раз я вижу документы со значением xs:date в формате 2010-08-19Z. Это совершенно правильное значение xs:date, но ни один из стандартных ISODateTimeFormat -генерированных LocalDate анализаторов, которые я пробовал, не примет его. Самое близкое, что я могу найти, это ISODateTimeFormat.dateParser(), который примет довольно странно выглядящий 2010-08-19TZ, но не 2010-08-19Z (обратите внимание на T).

Все это довольно раздражает, поскольку Joda и XML Schema должны строго придерживаться правил форматирования даты / времени ISO, но либо одно из них не соответствует, либо спецификация нечеткая.

Прежде чем я признаю поражение и произвожу ручной формат в произвольном формате, кто-нибудь может указать мне на ISODateTimeFormat -обработанный синтаксический анализатор, который будет читать это значение?

1 Ответ

1 голос
/ 20 августа 2010

Я считаю, что согласно ISO-8601, 'Z' является частью значения времени.Разделитель «Т» используется только для создания комбинированных значений даты / времени.Строгое прочтение этого означает, что «Z» не может появляться после даты без значения времени, которое может быть пустым, таким образом, «странно выглядящий» 2010-08-18TZ.

Это выглядит как небольшое несоответствие импеданса.между определениями xs: date и ISO-8601.

EDIT: Я нашел копию ISO 8601 .Он не определяет концепцию «зонированной по времени даты», как это определено в спецификации Типы схем XML .

Вместо того, чтобы писать с нуля, как насчет простой оболочки, которая преобразует экземпляры xs: date с часовыми поясами в соответствующие значения ISO-8601 (т.е. просто вставляет 'T'), а затем использует существующий ISODateTimeFormat.dateParser()?

...