[英]How to get all values where a certain Key matches in Dataweave 2.0?
[英]DataWeave 2.0 get time difference as a 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| 而不是 39600。當我們將秒數除以 3600 到 11 小時時,它可以工作,但我們需要它像 |PT11H| 而不是39600。
以上輸入 t1 和 t2 來自配置。 我們無法更改設置。
您可以使用dw::core::Periods
模塊的seconds
函數。 它將秒數作為參數並返回一個周期。
%dw 2.0
import seconds from dw::core::Periods
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
---
seconds( |PT24H| - (t2 - t1) )
另一個建議,因為您正在處理時間段和時差,所以時區並不重要。 您可以將代碼減少到 datawave 以下
%dw 2.0
import seconds from dw::core::Periods
output application/java
var t1 = '08:00:00.000' as Time
var t2 = '21:00:00.000' as Time
---
seconds( |PT24H| - (t2 - t1) )
DataWeave 2.4 版和 Mule Runtime 4.4 中的“秒”功能在周期模塊下引入
參考:秒 | MuleSoft 文檔https://docs.mulesoft.com/dataweave/2.4/dw-periods-functions-seconds
因此,如果您的 Mule 運行時版本低於 4.4,那么您必須按照問題本身所述除以 3600。
對於使用低於 4.4 的 Mule 運行時版本的開發人員,以下也是該解決方案
第一的:
%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
---
"|PT" ++ (|PT24H| - (t2-t1))/3600 ++ "H|"
解釋:由於 (|PT24H| - (t2-t1)) 給出 '39600' 作為以秒為單位的結果,現在要將秒轉換為分鍾,您需要除以 60,然后將分鍾轉換為小時,您需要再次除以 60,因此您可以直接除以 (60 * 60 即 3600) 並獲得小時數。
根據評論中的建議,如果時間不是精確的小時,那么我們可以使用下面的 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
---
"PT$(|PT24H| - (t2-t1))S" as Period
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.