You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT中将2009-02-07T15:23:00Z转换为Mmm DD, YYYY格式?

解决XSLT中ISO日期转Mmm DD, YYYY格式的问题

我猜你用format-dateTime()没输出,大概率是没传对必填的两个参数——目标日期时间值和格式模式字符串,或者可能用的是不支持这个函数的XSLT 1.0版本。下面分两种情况给你解决方案:

情况1:使用XSLT 2.0及以上版本

format-dateTime是XSLT 2.0引入的函数,需要两个参数:要格式化的日期时间值,以及定义输出格式的字符串。针对你的需求,正确的写法如下:

假设你的ISO日期存在于某个XML节点(比如<eventDate>2009-02-07T15:23:00Z</eventDate>),可以这么写:

<xsl:value-of select="format-dateTime(eventDate, '[MNn,*-3] [D01], [Y0001]')"/>

解释一下格式字符串的含义:

  • [MNn,*-3]:提取月份的3字符缩写(比如Feb),*-3表示强制取3个字符
  • [D01]:输出两位数字的日期,不足两位补零(比如07)
  • [Y0001]:输出4位完整年份(比如2009)

完整的示例样式表:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:value-of select="format-dateTime(/root/eventDate, '[MNn,*-3] [D01], [Y0001]')"/>
  </xsl:template>
</xsl:stylesheet>

注意:要确保你的XSLT处理器支持2.0+版本(比如Saxon),如果用的是老的Xalan这类只支持1.0的处理器,这个函数会失效。

情况2:使用XSLT 1.0版本

如果只能用XSLT 1.0,因为没有内置的日期格式化函数,我们需要手动截取日期片段并映射月份缩写:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <!-- 先获取ISO日期字符串 -->
    <xsl:variable name="isoDate" select="/root/eventDate"/>
    
    <!-- 截取年、月、日部分 -->
    <xsl:variable name="year" select="substring($isoDate, 1, 4)"/>
    <xsl:variable name="monthNum" select="substring($isoDate, 6, 2)"/>
    <xsl:variable name="day" select="substring($isoDate, 9, 2)"/>
    
    <!-- 映射月份缩写 -->
    <xsl:variable name="monthAbbr">
      <xsl:choose>
        <xsl:when test="$monthNum='01'">Jan</xsl:when>
        <xsl:when test="$monthNum='02'">Feb</xsl:when>
        <xsl:when test="$monthNum='03'">Mar</xsl:when>
        <xsl:when test="$monthNum='04'">Apr</xsl:when>
        <xsl:when test="$monthNum='05'">May</xsl:when>
        <xsl:when test="$monthNum='06'">Jun</xsl:when>
        <xsl:when test="$monthNum='07'">Jul</xsl:when>
        <xsl:when test="$monthNum='08'">Aug</xsl:when>
        <xsl:when test="$monthNum='09'">Sep</xsl:when>
        <xsl:when test="$monthNum='10'">Oct</xsl:when>
        <xsl:when test="$monthNum='11'">Nov</xsl:when>
        <xsl:when test="$monthNum='12'">Dec</xsl:when>
      </xsl:choose>
    </xsl:variable>
    
    <!-- 拼接成目标格式 -->
    <xsl:value-of select="concat($monthAbbr, ' ', $day, ', ', $year)"/>
  </xsl:template>
</xsl:stylesheet>

这样就能把2009-02-07T15:23:00Z转换成Feb 07, 2009啦~

内容的提问来源于stack exchange,提问作者Agniva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:58:05