UTC字符串日期转澳大利亚悉尼时区异常问题排查
问题解析与优化方案
你的转换结果其实是正确的,核心问题出在对悉尼时区夏令时的认知偏差,同时代码存在冗余步骤可以优化。
原因说明
澳大利亚悉尼时区(Australia/Sydney)实行夏令时制度:
- 非夏令时时段(每年4月至10月):与UTC时差为**+10小时**
- 夏令时时段(每年10月至次年4月):与UTC时差为**+11小时**
2024年悉尼夏令时从10月6日正式开始,所以: - 9月8日(inputUtc1)处于非夏令时,UTC时间08:23转换后为悉尼时间18:23,结果符合预期
- 10月15日(inputUtc2)处于夏令时,UTC时间00:00转换后为悉尼时间11:00,这个结果完全符合时区规则,并非错误。
代码优化
你的代码里多了一步不必要的字符串转换操作,不仅冗余,还可能带来时区信息丢失的风险。直接对原始UTC字符串解析后的DateTime对象进行时区转换即可,逻辑更清晰:
%dw 2.0 output application/json var inputUtc1 = "2024-09-08T08:23:00Z" as DateTime var inputUtc2 = "2024-10-15T00:00:00Z" as DateTime --- { "a1" : inputUtc1 >> "Australia/Sydney" as String {format: "yyyy-MM-dd'T'HH:mm:ss"}, "a2" : inputUtc2 >> "Australia/Sydney" as String {format: "yyyy-MM-dd'T'HH:mm:ss"} }
运行后输出结果和你之前的一致,但代码更简洁可靠。
内容的提问来源于stack exchange,提问作者boomslaw
相关产品推荐
相关产品推荐

