就我而言,我有两个时间戳请求和响应。我正在尝试计算两个时间戳之间的毫秒差异。
例如,如果 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"}
请高手帮我解答一下这个逻辑。
提前致谢。
首先定义时间值的正确方法是使用管道:
|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