我需要将2011年(2011年1月1日)的序数日期转换为MM / dd / yyyy格式(01/01/2011)。 XSLT 2.0没问题。
我可能没有正确地问过这个问题;我不确定需要哪些其他信息来帮助解决这个问题。让我知道,我将提供任何所需的信息。任何解决方案或指示赞赏。
答案 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,但这样可以确保您只尝试以正确的格式转换日期。