首页 > 解决方案 > 有没有办法使用 Dataweave 2.0.. 将特定输入日期(即(120042))转换为(DD MMM YYYY)?

问题描述

Order_Entry_Date 字段格式为 6 位。“120xxx” > “120” = 2020 年,“xxx”是该年的天数。示例:121001 = 2021 年 1 月 1 日

此输入格式的 Record_Timestamp 字段 - “YYYY-MM-DD-HH.mm.ss.decimalsecond”到输出格式“DD MMM YYYY - HH:mm:ss”(省略小数秒)

输入

{
 "orders": [
  {
    
   "Order_Number": "1112999",  
   "Order_Entry_Date": "120042",
   "Record_Timestamp": "2020-08-09-21.10.21.350090"
  }
 ]
}

输出

{
 "orders": [
  {
    
   "Order_Number": "1112999",  
   "Order_Entry_Date": "13 Mar 2020", 
   "Record_Timestamp":  "09 Aug 2020 21:10:21"
  }  
 ]
}

标签: muledataweavemulesoft

解决方案


看起来这是该Order_Entry_Date字段的 Julian 类型日期。
以下脚本应该可以产生预期的输出。

%dw 2.0
output application/json
fun convertJulianDate(d) = do {
    var day = d[3 to 5]
    var year = d[1 to 2]
    ---
    ((("0101" ++ year ) as Date {format: "ddMMyy"}) + ("P$(day - 1)D" as Period)) as Date {format: "dd MMM yyyy"}
} 
---
{
    orders: payload.orders map {
        "Order_Number": $.Order_Number,  
        "Order_Entry_Date": convertJulianDate($.Order_Entry_Date),
        "Record_Timestamp": $.Record_Timestamp as LocalDateTime {format: "yyyy-MM-dd-HH.mm.ss.SSSSSS"} as String {format: "dd MMM yyyy HH:mm:ss"}
    }
}

推荐阅读