XML dateTime с часовым поясом - PullRequest
       0

XML dateTime с часовым поясом

0 голосов
/ 27 октября 2018

Существует ли функция XPath или XSLT, которую можно использовать для преобразования даты, например "2015-10-15 11:45:46 EDT", для преобразования в действительный формат даты-времени XML с часовым поясом?

1 Ответ

0 голосов
/ 27 октября 2018

Я не уверен, что это правильный путь, но следующая функция берет часть вашей строки даты без часового пояса и преобразует ее в xs:dateTime, помещая T между xs:date и xs:time часть, затем форматирует его в формат, который может анализировать parse-ietf-date, включая предыдущую часть часового пояса в данных:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:mf="http://example.com/mf"
    exclude-result-prefixes="#all"
    expand-text="yes"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:function name="mf:parse-date" as="xs:dateTime">
      <xsl:param name="input" as="xs:string"/>
      <xsl:variable name="components" select="tokenize($input, ' ')"/>
      <xsl:variable name="dateTimeWithoutTz" select="xs:dateTime($components[1] || 'T' || $components[2])"/>
      <xsl:variable name="ietf-date" as="xs:string"
        select="format-dateTime($dateTimeWithoutTz, '[FNn,3-3], [D01] [MNn,3-3] [Y0004] [H01]:[m01]:[s01] ' || $components[3], 'en', (), ())"/>
      <xsl:sequence select="parse-ietf-date($ietf-date)"/>
  </xsl:function>

  <xsl:template match="date">
      <date input="{.}">{mf:parse-date(.)}</date>
  </xsl:template>

</xsl:stylesheet>

В https://xsltfiddle.liberty -development.net / bFDb2D5 , который дает результат 2015-10-15T11:45:46-04:00 для входа 2015-10-15 11:45:46 EDT.

Может быть проще построить отображение из известных имен часовых поясов в смещения, а затем преобразовать входные данные непосредственно в xs:dateTime, заменив пробел между датой и временем на T и имя часового пояса с соответствующим смещением.

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