我正在尝试将 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
我不确定为什么它适用于一个约会而不适用于另一次? (我正在操场上尝试这个。)
转换之间的差异是因为澳大利亚的夏令时更改于 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:...}