我们如何使用 Dataweave 检查 Payload 中的日期格式

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

我们有一个要求,其中源是一个文件,并且它有一个可以包含不同日期格式的日期字段。例如 MM/dd/yyyy 或 MM/dd/yy 或 MM-dd-yyyy 或 MM-dd-yy。我们要最终将这个日期字段转换为 MM-dd-yyyy

如何从源中检查日期格式并相应地将其转换为所需的格式?或者有没有办法可以将任何日期格式转换为所需的格式?

输入:

[
    {
        "date": "01-03-2023"
    },
    {
        "date": "01-03-23"
    },
    {
        "date": "01/03/2023"
    },
    {
        "date": "01/03/23"
    }
]

预期输出:格式“MM-dd-yyyy”

[
    {
        "date": "01-03-2023"
    },
    {
        "date": "01-03-2023"
    },
    {
        "date": "01-03-2023"
    },
    {
        "date": "01-03-2023"
    }
]

提前谢谢您

mule dataweave mulesoft mule4
1个回答
0
投票

您可以使用

try()
/
orElseTry()
/
orElse()
函数尝试不同的日期模式来转换输入。如果没有模式匹配,那么我返回 null 来表示错误(在最后一个
orElse()
中)。您可以通过添加
orElseTry()
调用来添加其他输入模式。此解决方案的一个好处是避免使用字符串操作来处理日期,即一种反模式。

%dw 2.0
output application/json
import * from dw::Runtime
fun attemptDateParsing(d:String)=
    (try(() -> d as Date {format: "MM-dd-yyyy"} as String { format: "MM-dd-yyyy" })  
    orElseTry (() -> d as Date {format: "MM-dd-yy"} as String { format: "MM-dd-yyyy" }) 
    orElseTry (() -> d as Date {format: "MM/dd/yyyy"} as String { format: "MM-dd-yyyy" }) 
    orElseTry (() -> d as Date {format: "MM/dd/yy"} as String { format: "MM-dd-yyyy" }) 
    orElse (() -> null))
---
payload map { date: attemptDateParsing($.date)}

输出:

[
  {
    "date": "01-03-2023"
  },
  {
    "date": "01-03-2023"
  },
  {
    "date": "01-03-2023"
  },
  {
    "date": "01-03-2023"
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.