尝试将标准日期转换为Julian天数。是否有用于成功转换日期的功能或方法?这适用于XSLT 2.0。另外一个限制是不能使用额外的附加软件包,只需要直接使用XSLT 2.0
提前感谢您的意见。
示例:2016-07-05转换为2457574.50000
答案 0 :(得分:1)
首先,YYYY-MMM-DD
不是标准日期。在使用任何日期函数之前,必须将提供的字符串转换为YYYY-MM-DD
格式的有效日期。完成后,计算可以非常简单。
为方便起见,以下样式表使用两个自定义函数:一个用于将字符串转换为正确的日期,另一个用于计算实际的Julian日期数。
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="xs my">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:function name="my:reformat-date">
<xsl:param name="datestring"/>
<xsl:variable name="y" select="substring($datestring, 1, 4)"/>
<xsl:variable name="mmm" select="substring($datestring, 6, 3)"/>
<xsl:variable name="d" select="substring($datestring, 10, 2)"/>
<xsl:variable name="m" select="format-number(index-of(('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'), $mmm), '00')"/>
<xsl:sequence select="xs:date(concat($y, '-', $m, '-', $d))" />
</xsl:function>
<xsl:function name="my:julian-day-number">
<xsl:param name="date" as="xs:date"/>
<xsl:variable name="epoch" select="xs:date('-4714-11-24')"/>
<xsl:sequence select="days-from-duration($date - $epoch)"/>
</xsl:function>
<xsl:template match="/">
<result>
<xsl:value-of select="my:julian-day-number(my:reformat-date('2016-JUL-05'))" />
</result>
</xsl:template>
</xsl:stylesheet>
<强>结果强>
<?xml version="1.0" encoding="UTF-8"?>
<result>2457575</result>
注意:
严格地说,朱利安日数在中午变化。如果您的输入未指示当天的时间,则决定是否选择给定日期的AM或PM部分的编号完全是任意的。