xslt 1.0 yyyy-MM-ddHH: mm: ss to YYYY-MM-DDTHH: mm: ss.sssZ

Я использую xslt 1.0 и пытаюсь преобразовать дату из yyyy-MM-ddHH: mm: ss в YYYY-MM-DDTHH: mm: ss.sssZ

Входной образец <StartDate>2014-07-2217:18:15</StartDate>

Требуемый выходной формат <startDate>2014-07-22T17:18:15.899+12:00</startDate> в часовом поясе NZST

Я пробовал использовать образец, как в http://wiki.apache.org/cocoon/Tips/JavaInXslt безуспешно, так как я получаю сообщение об ошибке «Функция 'sdf: new' не определена». Также посмотрел на расширения EXSLT для обработки даты и времени, но EXSLT не имеет функции для часового пояса.

Любезный совет о том, как я могу преобразовать дату из yyyy-MM-ddHH: mm: ss в YYYY-MM-DDTHH: mm: ss.sssZ, кроме использования concat «+12: 00» в конце значения startDate?

Заранее спасибо!


person ASM    schedule 04.08.2014    source источник
comment
Вы должны иметь возможность сделать что-то подобное с NSTimeZone (который вы включили как тег) и NSDateFormatter. Но поскольку в вашем вопросе говорится, что вы хотите использовать XSLT, вы, похоже, исключаете это.   -  person Tom Harrington    schedule 05.08.2014


Ответы (1)


как я могу преобразовать дату из yyyy-MM-ddHH: mm: ss в YYYY-MM-DDTHH: mm: ss.sssZ, кроме использования concat «+12: 00» в конце значения startDate?

Другого пути нет*. XSLT 1.0 не имеет понятия дат; ваши данные представляют собой бессмысленную текстовую строку, и ими нужно управлять как таковые.

-
(*) Если только вы не создадите свой собственный путь, расширив возможности вашего процессора с помощью определяемой пользователем функции, как вы пытались. Но это другой вопрос - и IMHO решение с использованием строковых функций тривиально и удовлетворительно.

person michael.hor257k    schedule 04.08.2014
comment
Другая проблема также связана с переходом на летнее время: при переходе на летнее время это +12: 00, но когда летнее время заканчивается, это +13: 00. Переход на летнее время заканчивается в последнее воскресенье сентября (+13: 00). - person ASM; 05.08.2014
comment
@ user3756530 Как вы говорите, это уже другой вопрос. И это не может быть удовлетворительно решено с помощью одного только XSLT, потому что начальная и конечная точки DST имеют тенденцию колебаться. В частности, в Новой Зеландии даты до сентября 2007 года должны обрабатываться иначе, чем даты после (например, ). Если вы хотите сделать это правильно, используйте внешнюю функцию или веб-службу для доступа к базе данных часовых поясов. - person michael.hor257k; 05.08.2014