将 UTC 格式的字符串日期转换为 AEST

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

我正在尝试将 UTC 时区中的字符串格式的日期转换为澳大利亚/悉尼时区。它似乎适用于一个值,但不适用于另一个值,所以我有点困惑

%dw 2.0
import * from dw::core::Strings
output application/json

var inputUtc1 = "2024-09-08T08:23:00Z"
var inputUtc2 = "2024-10-15T00:00:00Z"
fun format(d: DateTime) = d as String {format: "yyyy-MM-dd'T'HH:mm:ss"}
---
{
    "a1" : (format(inputUtc1) >> "Australia/Sydney") as String {format: 'yyyy-MM-dd\'T\'HH:mm:ss'},
    "a2" : (format(inputUtc2) >> "Australia/Sydney") as String {format: 'yyyy-MM-dd\'T\'HH:mm:ss'}
}

生成的输出是:

{
  "a1": "2024-09-08T18:23:00",
  "a2": "2024-10-15T11:00:00"
}

a1 的值似乎是正确的,但 a2 的值似乎不正确 UTC 中的

2024-10-15T00:00:00Z
应转换为
2024-10-15T10:00:00

但是它将其转换为 2024-10-15T11:00:00Z

我不确定为什么它适用于一个约会而不适用于另一次? (我正在操场上尝试这个。)

mule dataweave mule4
1个回答
0
投票

转换之间的差异是因为澳大利亚的夏令时更改于 2024 年 10 月 6 日发生更改。由于第一个日期在更改之前,第二个日期在更改之后,因此正常情况下会出现一小时的差异。

如果您想要进行恒定的转换,您可以使用固定的数字时区差异而不是某个位置的时区。

%dw 2.0
output application/json
---
{
    l1: |2024-09-08T08:23:00Z| >> "Australia/Sydney",
    l2: |2024-10-15T00:00:00Z| >> "Australia/Sydney",
    d1: |2024-09-08T08:23:00Z| >> "UTC+10",
    d2: |2024-10-15T00:00:00Z| >> "UTC+10"
}

输出

{
  "l1": "2024-09-08T18:23:00+10:00",
  "l2": "2024-10-15T11:00:00+11:00",
  "d1": "2024-09-08T18:23:00+10:00",
  "d2": "2024-10-15T10:00:00+10:00"
}

与问题无关,如果要进行日期时间转换,最好将类型保留为日期时间而不是转换为字符串,以避免进行额外的隐式转换。示例:

"2024-09-08T08:23:00Z" as DateTime >> "Australia/Sydney" as String {format:...}

© www.soinside.com 2019 - 2024. All rights reserved.