使用 Dataweave 查找两个时间戳之间的差异

问题描述 投票:0回答:1

就我而言,我有两个时间戳请求和响应。我正在尝试计算两个时间戳之间的毫秒差异。

例如,如果 Time1 为“04:49:11.001”,Time2 为“04:49:21.001”,则差异为 10 秒和 1000 毫秒。

但是对于 Time1:“23:59:50.853”和 Time2:“00:00:10.678”它无法正常工作。对于这种情况,日期将更新为下一个日期。我期望得到的时间差值为 20000 毫秒。

但是对于上面的代码,我得到了一个负值。

我的数据编织代码:

%dw 2.0
output application/json
var time1 = "23:59:50.001"
var time2 = "00:00:10.001"
---
(time2 - time1) as Number {"unit" : "milliseconds"}

请高手帮我解答一下这个逻辑。

提前致谢。

dataweave mulesoft mule4
1个回答
0
投票

首先定义时间值的正确方法是使用管道:

|23:59:50.001|
。您正在定义字符串变量,幸运的是 DataWeave 可以正确自动转换,但这样做可能会在将来引起一些问题。

这里发生的事情是您的输入数据只是时间信息。由于不涉及日期,因此 DataWeave 无法知道时间是从今天开始还是从下一天开始,还是在一年内。当仅处理时间信息时,进行其他假设是没有意义的。所以结果是可以预料的。它是

00:00:10.001
处的毫秒数(从
00:00:00.000
开始)减去
23:59:50.001
的毫秒数(同样,从午夜开始计算)。显然后面的数字更高,结果为负。

如果您知道时间来自不同日期,那么您需要使用 DataTime 或 LocalDateTime 类型进行计算以获得预期结果。

示例:

%dw 2.0
output application/json
var time1 = now() as Date ++ |23:59:50.001| 
var time2 = now() as Date + |P1D| ++ |00:00:10.001| // adding a period of 1 day to today gives us tomorrow
---
(time2 - time1) as Number {"unit" : "milliseconds"}

输出:

20000
© www.soinside.com 2019 - 2024. All rights reserved.