序数日期转换为MM / dd / yyyy格式

时间:2011-08-02 19:00:53

标签: xslt xslt-2.0

我需要将2011年(2011年1月1日)的序数日期转换为MM / dd / yyyy格式(01/01/2011)。 XSLT 2.0没问题。

我可能没有正确地问过这个问题;我不确定需要哪些其他信息来帮助解决这个问题。让我知道,我将提供任何所需的信息。任何解决方案或指示赞赏。

1 个答案:

答案 0 :(得分:3)

这适用于XSLT 2.0:

<xsl:template match="date">
  <xsl:copy>
     <xsl:analyze-string select="." regex="([0-9]{{4}})([0-9]{{3}})">
       <xsl:matching-substring>
         <xsl:variable name="jan1" as="xs:date" select="xs:date(fn:concat(fn:regex-group(1),'-01-01'))"/>
         <xsl:variable name="offset" as="xs:dayTimeDuration" select="xs:dayTimeDuration(fn:concat('P',number(fn:regex-group(2))-1,'D'))"/>
         <xsl:value-of select="format-date($jan1+$offset, '[M,2]/[D,2]/[Y]')"/>
       </xsl:matching-substring>
       <xsl:non-matching-substring>
         <xsl:value-of select="."/>
       </xsl:non-matching-substring>
     </xsl:analyze-string>
   </xsl:copy>
</xsl:template>

秘密是使用序数作为所提供年份1月1日的偏差。然后,format-date可以以您想要的任何格式输出日期。

您可以使用substring()而不是xsl:analyze-string,但这样可以确保您只尝试以正确的格式转换日期。