Форматирование даты с часовыми поясами в XSL

#xml #apache-fop #xslt-3.0

#xml #apache-fop #xslt-3.0

Вопрос:

Из XML я получаю дату в виде

 value="2020-08-11T21:00:00.000Z"
  

Я живу в часовом поясе GMT 3, поэтому эта дата должна вернуться 2020-08-12. Если я просто вывожу дату и отображаю ее в браузере, кажется, что она отображается правильно. Но когда я вывожу ее в PDF с помощью apache FOP, она показывает только отображаемое там значение.

Я пытался использовать format-dateTime() , но он выводит дату как за день до этого. Что еще я мог бы попробовать?

Кроме того, подстрока здесь не подходит. Мне нужно, чтобы XSLT автоматически добавлял 3 часа (зависит от часового пояса) к заданной дате, чтобы он возвращал правильную дату.

Ответ №1:

format-date и format-dateTime возьмите часовой пояс / место, для которого вы хотите отформатировать дату или DateTime в качестве пятого аргумента, так что, например, format-dateTime(xs:dateTime('2020-08-11T21:00:00.000Z'), '[Y0001]-[M01]-[D01] [z]', 'en', (), 'Asia/Baghdad') вы должны получить, например, 2020-08-12 GMT 03:00 .

https://xsltfiddle .liberty-development.net/6pS2B6W

Комментарии:

1. Потрясающе, спасибо! Не могли бы вы также перенаправить меня в список местоположений, потому что мне, вероятно, потребуется использовать что-то другое, кроме Asia / Baghdad

2. Я посмотрел на en.wikipedia.org/wiki/List_of_tz_database_time_zones но я не могу точно сказать, соответствует ли этот список тому, на что ссылается спецификация функции XPath с именами часовых поясов Olson. Спецификация имеет ссылку на w3.org/TR/xpath-functions/#olson и где-то говорится, что от каждой реализации зависит, какая версия базы данных часовых поясов поддерживается.