我有如下所示的xml标签:
<row number="3" cols="3">
..
<col number="7">41973</col>
</row>
其中 41973 描述 11/30/2014 的一天。如何在 xslt 中解析迄今为止的值 41973?
此致敬意
将 1900 日期系统中的 Excel 序列号转换为 ISO-8601 日期 (YYYY-MM-DD(:
XSLT 1.0
<xsl:template name="excel-serial-number-to-date">
<xsl:param name="excel-serial-number"/>
<xsl:param name="JDN" select="$excel-serial-number + 2415019 + ($excel-serial-number < 61)"/>
<xsl:param name="f" select="$JDN + 1401 + floor((floor((4 * $JDN + 274277) div 146097) * 3) div 4) - 38"/>
<xsl:param name="e" select="4*$f + 3"/>
<xsl:param name="g" select="floor(($e mod 1461) div 4)"/>
<xsl:param name="h" select="5*$g + 2"/>
<xsl:param name="D" select="floor(($h mod 153) div 5 ) + 1"/>
<xsl:param name="M" select="(floor($h div 153) + 2) mod 12 + 1"/>
<xsl:param name="Y" select="floor($e div 1461) - 4716 + floor((14 - $M) div 12)"/>
<xsl:param name="MM" select="format-number($M, '00')"/>
<xsl:param name="DD" select="format-number($D, '00')"/>
<xsl:value-of select="concat($Y, '-', $MM, '-', $DD)" />
</xsl:template>
调用模板的示例:
<output>
<xsl:call-template name="excel-serial-number-to-date">
<xsl:with-param name="excel-serial-number" select="41973" />
</xsl:call-template>
</output>
结果:
<output>2014-11-30</output>
注:
Excel 序列号 60
和 61
的结果将相同:1900-03-01
。这是因为 Excel 与序列号60
关联的日期1900-02-29
在公历中不存在。