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

迁移至XPath3.1&Saxon10后,current-dateTime()精度调整咨询

恢复XPath 3.1/Saxon 10中current-dateTime()的3位毫秒输出格式

可以通过以下几种方式恢复此前的3位毫秒精度输出行为:

1. 显式使用格式化函数(推荐)

直接用format-dateTime()指定输出格式,彻底摆脱版本默认行为的影响,这是最可靠的方式:

format-dateTime(current-dateTime(), "[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01].[f001][Z]")

该格式字符串会强制将秒的小数部分限制为3位,正好对应毫秒精度,输出结果与Saxon 9时期一致。

2. 调整Saxon配置参数

针对Saxon 10及后续版本,可以通过配置修改默认的日期时间序列化规则:

  • Java API场景:在Configuration对象中调用setDateTimeFormatter(),传入仅保留3位毫秒的格式化规则;
  • 命令行场景:添加--suppress-microseconds参数(部分版本支持,需核对对应版本文档);
  • XSLT/XQuery场景:设置全局序列化参数date-time-format,指定目标格式。

3. 手动截断微秒部分

如果不想修改配置或使用格式化函数,也可以通过XPath表达式手动截断精度:

current-dateTime() 
- xs:dayTimeDuration(concat('PT', substring-after(substring-after(string(current-dateTime()), '.'), '+'), 'S')) 
+ xs:dayTimeDuration(concat('PT', substring-before(substring-after(string(current-dateTime()), '.'), '+'), 'S'))

这种方法通过计算截断微秒部分,实现精度调整,但逻辑相对繁琐,不如格式化函数直观。

注意:current-dateTime()返回的xs:dateTime值本身仍保留完整精度,只是序列化输出格式发生了变化。如果业务仅关注输出格式,优先使用format-dateTime()方案,兼容性和可读性最佳。

内容的提问来源于stack exchange,提问作者Siddhant K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:31:03