Преобразование даты и XML в часовой пояс UTC с помощью XSLT - PullRequest
3 голосов
/ 29 декабря 2011

У меня есть XML-документ с датами в стандартном формате ISO 8601.Например:


2011-11-29T04:15:22-08:00

Я хотел бы преобразовать время в UTC и дату вывода в следующей форме, используя XSLT:


2011-11-29 12:15:22

Как это сделать?

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

Ответы [ 2 ]

8 голосов
/ 29 декабря 2011

Следующее выражение XPath 2.0 создает искомое строковое значение :

  translate(
    string(
       adjust-dateTime-to-timezone(
          xs:dateTime('2011-11-29T04:15:22-08:00'),
          xs:dayTimeDuration('PT0H')
                              )
         ),
     'TZ',
     ' '
            )

Проверка на основе XSLT :

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:sequence select=
     "translate(
        string(
           adjust-dateTime-to-timezone(
              xs:dateTime('2011-11-29T04:15:22-08:00'),
              xs:dayTimeDuration('PT0H')
                                  )
             ),
         'TZ',
         ' '
                )
     "/>
 </xsl:template>
</xsl:stylesheet>

когда это преобразование применяется к любому документу XML (не используется), вычисляется выражение XPath и результат этой оценки выводится :

2011-11-29 12:15:22
0 голосов
/ 29 декабря 2011

XSLT-1.0 не имеет функций для форматирования даты.

Поэтому вы должны работать с ним как с текстом - см. Связанный вопрос Форматировать дату в XML с помощью XSLT

Другой возможный способ - создать функции расширения (см. Ответ @ 0xA3 на тот же вопрос в случае MSXSL и .Net)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...