我有一个以默认格式返回日期和时间的列。
<xsl:value-of select="/CAudioFile/CRI/LocalStartTime"/>
返回
2014-05-08T08:01:26.4000000-0700
我想把这段时间用在这种格式中:
05/08/2014 08:01:26
我试图使用不同的子串组合来获取格式:
<xsl:value-of select="substring(/CAudioFile/CRI/LocalStartTime,1,10)"/>
但要么只是回复我的日期,要么就是时间。
有什么建议吗?
谢谢。
答案 0 :(得分:4)
你需要更加努力地工作:
<xsl:value-of select="substring(CAudioFile/CRI/LocalStartTime, 6, 2)"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="substring(CAudioFile/CRI/LocalStartTime, 9, 2)"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="substring(CAudioFile/CRI/LocalStartTime, 1, 4)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="substring(CAudioFile/CRI/LocalStartTime, 12, 8)"/>
答案 1 :(得分:2)
您没有指定XSLT的版本。如果您可以使用2.0,则可以使用format-dateTime()
。
在你的情况下,这有点棘手,因为你的例子由于时区而不能作为xs:dateTime
进行转换。时区需要2位数; 07:00
代替0700
。您可以使用replace()
并转换为xs:dateTime
来解决此问题。
这是一个例子。我已将replace()
放在xsl:variable
中,以便于阅读。但这不是必需的。
XML输入
<test>2014-05-08T08:01:26.4000000-0700</test>
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">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:variable name="dt" select="xs:dateTime(replace(normalize-space(.),'([+-]\d{2})(\d{2})$','$1:$2'))" as="xs:dateTime"/>
<xsl:copy>
<xsl:value-of select="format-dateTime($dt,'[M00]/[D00]/[Y] [H00]:[m00]:[s00]')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<test>05/08/2014 08:01:26</test>
您可以在此处找到有关图片字符串的更多信息(format-dateTime()
的第二个参数):
答案 2 :(得分:0)
这些变量将为您提供日期(采用ISO 8601格式)和使用XPath 1.0表达式的时间:
<xsl:variable name="date">
<xsl:value-of select="substring-before(.,'T')"/>
</xsl:variable>
<xsl:variable name="time">
<xsl:value-of select="substring-before(substring-after(.,'T'),'.')"/>
</xsl:variable>
要将日期转换为 mm / dd / yyyy 格式,您可以将此模板添加到样式表中:
<xsl:template name="iso-to-mdy">
<xsl:param name="iso-date"/>
<xsl:variable name="year" select="substring($iso-date,1,4)"/>
<xsl:variable name="month" select="substring($iso-date,6,2)"/>
<xsl:variable name="day" select="substring($iso-date,9,2)"/>
<xsl:value-of select="$month"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="$day"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="$year"/>
</xsl:template>
而是声明你的date
变量,将ISO 8601日期作为参数传递:
<xsl:variable name="date">
<xsl:call-template name="iso-to-mdy">
<xsl:with-param name="iso-date" select="substring-before(.,'T')"/>
</xsl:call-template>
</xsl:variable>
然后您将获得所需格式的日期。要在时间和日期之间打印空格,您可以使用<xsl:text>
:
<date>
<xsl:value-of select="$date"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$time"/>
</date>
将打印
<date>05/08/2014 08:01:26</date>
参见 XSLT Fiddle