在XSLT中将ISO日期格式转换为RFC 2822格式

时间:2016-03-03 10:17:08

标签: xslt-1.0

我的约会时间为“2016-03-03T05:11:56”。我希望将其显示为RFC 2822日期格式(星期四,2016年3月3日05:11:56 GMT)。如何在XSLT 1.0中实现这一点?感谢任何帮助。谢谢大家

1 个答案:

答案 0 :(得分:0)

假设您的日期时间不包含时间偏移或小数秒,您可以使用以下内容:

<xsl:template name="dateTime-to-RFC-2822">
    <xsl:param name="dateTime"/>
    <!-- extract components -->
    <xsl:variable name="year" select="substring($dateTime, 1, 4)" />
    <xsl:variable name="month" select="substring($dateTime, 6, 2)" />
    <xsl:variable name="day" select="substring($dateTime, 9, 2)" />
    <!-- calculate day-of-week using Zeller's_congruence -->
    <xsl:variable name="a" select="$month &lt; 3"/>
    <xsl:variable name="m" select="$month + 12*$a"/>
    <xsl:variable name="y" select="$year - $a"/>
    <xsl:variable name="K" select="$y mod 100"/>
    <xsl:variable name="J" select="floor($y div 100)"/>
    <xsl:variable name="h" select="($day + floor(13*($m + 1) div 5) + $K + floor($K div 4) + floor($J div 4) + 5*$J + 6) mod 7"/>
    <!-- construct output -->
    <xsl:value-of select="substring('SunMonTueWedThuFriSat', 3 * $h + 1, 3)"/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select="$day"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="substring('JanFebMarAprMayJunJulAugSepOctNovDec', 3 * ($month - 1) + 1, 3)"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$year"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="substring-after($dateTime, 'T')" />
    <xsl:text> GMT</xsl:text>
</xsl:template> 

注意:我认为GMT后缀已过时,您应该使用+0000代替。