我正在尝试将 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 的值似乎是正确的,但对于
2024-10-15T00:00:00Z
UTC 中的 a2 来说似乎不正确,应该转换为2024-10-15T10:00:00
然而它正在将其转换为 2024-10-15T 11 :00:00Z
我不确定为什么它对一个日期有效而对另一个日期无效?(我在操场上尝试这个。)
转换之间的差异是因为澳大利亚的夏令时将于 2024 年 10 月 6 日发生变化。因为第一个日期在变化之前,而第二个日期在变化之后,所以存在一个小时的差异是正常现象。
如果您想要进行恒定的转换,则可以使用固定的数字时区差异,而不是位置的时区。
输出
与问题无关,如果您要进行日期时间转换,最好将类型保留为日期时间而不是转换为字符串,以避免进行额外的隐式转换。 例如:
"2024-09-08T08:23:00Z" as DateTime >> "Australia/Sydney" as String {format:...}