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

DataWeave 2.0计算时间差如何返回|PT11H|格式Period而非秒数值

DataWeave时间差返回Period格式实现

问题复现

当前使用的DataWeave代码如下:

%dw 2.0
output application/java
var timezone = (now() >> "Pacific/Auckland") as String {format: "XXX"}
var t1 = '08:00:00.000' ++ timezone
var t2 = '21:00:00.000' ++ timezone
---
(|PT24H| - (t2-t1)) 

代码执行返回数值39600,对应时长11小时,预期输出为|PT11H|格式的Period类型值,而非纯秒数。

约束条件:入参t1、t2来自固定配置,不允许修改原有配置的取值逻辑。

解决方案

直接导入DataWeave核心内置的dw::core::Periods模块,使用seconds函数将计算得到的秒级差值转换为Period类型即可,无需手动做小时换算,修改后完整代码:

%dw 2.0
output application/java
import * from dw::core::Periods
var timezone = (now() >> "Pacific/Auckland") as String {format: "XXX"}
var t1 = '08:00:00.000' ++ timezone
var t2 = '21:00:00.000' ++ timezone
var diffInSeconds = |PT24H| - (t2 - t1)
---
seconds(diffInSeconds)

原理说明

  • 原代码中|PT24H|是Period类型值,和(t2-t1)计算得到的DateTime时间差做算术运算时,DataWeave会自动将Period类型转换为秒级数值参与计算,最终返回结果是Number类型的秒数,而非Period类型。
  • seconds()函数是Periods模块提供的内置转换方法,接收数值类型的秒数入参,直接返回对应时长的Period类型值,上述代码执行后会直接输出|PT11H|,完全符合需求。
  • 方案全程未修改t1、t2的原有取值逻辑,满足配置不可修改的约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:09:14