Estou tentando converter uma data em formato de string no fuso horário UTC para o fuso horário da Austrália/Sydney. Parece funcionar para um valor, mas não para o outro, então estou um pouco confuso
%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'}
}
A saída gerada é:
{
"a1": "2024-09-08T18:23:00",
"a2": "2024-10-15T11:00:00"
}
O valor contra a1 parece estar correto, mas parece incorreto para a2
2024-10-15T00:00:00Z
em UTC deve converter em2024-10-15T10:00:00
No entanto, ele está convertendo para 2024-10-15T 11 :00:00Z
Não sei por que funciona para uma data e não para outra. (Estou tentando isso no parquinho.)
A diferença entre as conversões ocorre porque o horário de verão na Austrália muda em 6 de outubro de 2024. Como a primeira data é anterior à mudança e a segunda data é posterior, é esperada uma diferença de uma hora como comportamento normal.
Se você quiser ter uma conversão constante, poderá usar uma diferença de fuso horário numérica fixa em vez do fuso horário de um local.
Saída
Sem relação com o problema, se você for fazer transformações de data e hora, é melhor manter o tipo como data e hora em vez de converter para String, para evitar fazer transformações implícitas extras. Exemplo:
"2024-09-08T08:23:00Z" as DateTime >> "Australia/Sydney" as String {format:...}