XSL datetime, удаление и сжатие часового пояса во времени - PullRequest
2 голосов
/ 17 октября 2011

Я сохраняю некоторые временные метки в моих результатах XML в стандартном формате UTC.

То, что я хотел бы сделать, это преобразовать это в удобочитаемое время. Без добавления часового пояса. Насколько я смог сделать это так:

format-dateTime(
  xs:dateTime(
   adjust-dateTime-to-timezone(
      xs:dateTime(@thevalue),xs:dayTimeDuration('P0DT4H')
   )
  ),'[M01]/[D01]/[Y0001]  [H01]:[m01]:[s01]'
)

где @thevalue равно: 2006-02-15T17:00:00

Это вызывает у меня головную боль, потому что средство форматирования возвращает время 17:00. Если я открою слой format-dateTime, чтобы посмотреть, что возвращает функция Adjust-DateTime, он выдаст

2006-02-15T17:00:00+04:00

... и все, что я действительно хочу увидеть, это 21:00 ... очень расстроенный. Кто-нибудь имел дело с этим раньше?

1 Ответ

2 голосов
/ 18 октября 2011

Вот трансформация, которая делает то, что вы хотите :

<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:variable name="vDateTime" as="xs:dateTime"
  select="xs:dateTime('2006-02-15T17:00:00+00:00')"/>

 <xsl:template match="/">
  <xsl:sequence select=
   "adjust-dateTime-to-timezone($vDateTime,
                                xs:dayTimeDuration('P0DT4H')
                               )"/>
 </xsl:template>
</xsl:stylesheet>

При применении к любому документу XML (не используется), результат будет :

2006-02-15T21:00:00+04:00

И полное решение:

<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:variable name="vDateTime" as="xs:dateTime"
  select="xs:dateTime('2006-02-15T17:00:00+00:00')"/>

 <xsl:template match="/">
  <xsl:variable name="vadjustedDateTime" select=
   "adjust-dateTime-to-timezone($vDateTime,
                                xs:dayTimeDuration('P0DT4H')
                               )"/>

  <xsl:sequence select=
  "format-dateTime($vadjustedDateTime,
                   '[M01]/[D01]/[Y0001]  [H01]:[m01]:[s01]'
                   )
  "/>
 </xsl:template>
</xsl:stylesheet>

, который дает этот результат :

02/15/2006  21:00:00
...