在 dataweave 2.0 中将格式为 EEE MMM dd HH:mm:ss zzz yyyy 的日期转换为 dd/MM/yyyy

Convert date with format EEE MMM dd HH:mm:ss zzz yyyy to dd/MM/yyyy in dataweave 2.0

我有一些 EEE MMM dd HH:mm:ss zzz yyyy 格式的 SAP 日期。例如,Mon Sep 02 00:00:00 BST 2019。我需要使用 dataweave 2.0 将其转换为 dd/MM/yyyy,但直到现在我都没有成功。

我认为这种转变可能 运行 很好,但事实并非如此:

%dw 2.0
output application/json
---
{
    timestamp: "Mon Sep 02 00:00:00 BST 2019" as LocalDateTime {format: "EEE MMM dd HH:mm:ss zzz yyyy"} >> "BST" as String {format: "dd/MM/yyyy"}
}

我要转换的数据有点复杂:

[
    {
        "id": 1,
        "timestamp": "Tue Jan 06 00:00:00 BST 2000"
    },
    {
        "id": 2,
        "timestamp": "Sun Dec 05 00:00:00 BST 2015"
    },
    {
        "id": 3,
        "timestamp": "Mon Oct 04 00:00:00 BST 2017"
    },
    {
        "id": 4,
        "timestamp": "Sat Jul 03 00:00:00 BST 2020"
    },
    {
        "id": 5,
        "timestamp": "Mon Sep 02 00:00:00 BST 2019"
    }
]

您需要使用输入格式将字符串转换为日期,然后将日期转换为具有输出格式的字符串。请注意,输入有一个时区,因此它不能是 LocalDateTime。

%dw 2.0
output application/json
---
"Mon Sep 02 00:00:00 BST 2019" as DateTime {format: "EEE MMM dd HH:mm:ss zzz yyyy"} as String { format: "dd/MM/yyyy" }

您输入的星期几不正确。我固定为:

[
    {
        "id": 1,
        "timestamp": "Thu Jan 06 00:00:00 BST 2000"
    },
    {
        "id": 2,
        "timestamp": "Sat Dec 05 00:00:00 BST 2015"
    },
    {
        "id": 3,
        "timestamp": "Wed Oct 04 00:00:00 BST 2017"
    },
    {
        "id": 4,
        "timestamp": "Fri Jul 03 00:00:00 BST 2020"
    },
    {
        "id": 5,
        "timestamp": "Mon Sep 02 00:00:00 BST 2019"
    }
]

要解析每个时间戳和 return 您可以使用的数组:

%dw 2.0
output application/json
---
payload map $.timestamp as DateTime {format: "EEE MMM dd HH:mm:ss zzz yyyy"} as String { format: "dd/MM/yyyy" }

您遇到的问题是因为输入负载中的某些日期无效。检查此问题以获取更多详细信息:

如果修复无效条目的星期几,dataweave 表达式将按预期工作(确保星期几对应于每个时间戳的实际星期几)。

此外,请确保将时间戳转换为 DateTime,因为它包含时区:

%dw 2.0
output application/json
---
payload map (item, index) -> 
{
    timestamp: item.timestamp as DateTime {format: "EEE MMM dd HH:mm:ss zzz yyyy"} as Date {format: "dd/MM/yyyy"}
}