我们有一个要求,其中源是一个文件,并且它有一个可以包含不同日期格式的日期字段。例如 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"
}
]
提前谢谢您
您可以使用
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"
}
]