You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在XSLT的format-time方法输出中添加毫秒?

解决XSLT format-time输出毫秒的问题

我来帮你搞定这个毫秒输出的问题,之前的写法没生效主要有两个关键点没处理好:

1. 先确认XSLT版本和时间类型转换

format-time是XSLT 2.0及以上版本才支持的函数,而且它要求第一个参数是时间类型(xs:time/xs:dateTime),不是字符串。你的<Qtime>里的内容是字符串格式的时间,直接传进去的话,函数没法识别里面的毫秒部分,所以第一步要把它转换成xs:time类型。

2. 用正确的毫秒格式标记

你之前尝试的[S...]是错误的,XSLT的format-time里,小数秒(也就是毫秒)对应的标记是[f...]

  • [f03]:强制显示三位毫秒(比如000、123)
  • [f...]:显示所有非零的小数秒位数(比如如果是14:00:00.5Z,会显示.5而不是.500)

完整的工作示例

下面是修正后的XSLT代码片段,直接用就能输出带毫秒的时间:

<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xsl:template match="Qtime">
    <!-- 先把字符串转成xs:time,再格式化输出时分秒+三位毫秒 -->
    <xsl:value-of select="format-time(xs:time(.), '[H01]:[m01]:[s01].[f03]')" />
  </xsl:template>

</xsl:stylesheet>

比如输入<Qtime>14:00:00.123Z</Qtime>,输出就是14:00:00.123;如果输入是<Qtime>14:30:45.5Z</Qtime>,输出会是14:30:45.500(因为用了f03强制三位)。

如果你的XSLT处理器不支持2.0版本(比如老版本的Xalan),那可以用字符串截取的方式兜底:比如用substring-before(substring-after(Qtime, '.'), 'Z')提取毫秒部分,再拼接到格式化后的时间后面。不过优先推荐用XSLT 2.0的标准方法,更可靠。

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

火山引擎 最新活动