Função de ER CHANGETIMEZONE
A função CHANGETIMEZONE
retorna um valor DateTime no Tempo Universal Coordenado (Greenwich Mean Time [GMT]) convertido de um determinado valor de data em um fuso horário para um valor de data/hora em outro fuso horário.
Sintaxe
CHANGETIMEZONE (datetime, base time zone, target time zone)
Argumentos
datetime
: DateTime
Um valor de data/hora no fuso horário do Tempo Universal Coordenado que representa o valor de data/hora a ser convertido.
base time zone
: Cadeia de caracteres
O nome do fuso horário para o qual um determinado valor de data/hora é deslocado antes da conversão.
target time zone
: Cadeia de caracteres
O nome do fuso horário para o qual um valor de data/hora convertido é deslocado durante a conversão.
Valores de retorno
Data e Hora
O valor de data/hora resultante no fuso horário do Tempo Universal Coordenado.
Notas de uso
Para especificar fusos horários de origem e destino, você pode usar os nomes de fuso horário fornecidos pela IANA (Internet Assigned Numbers Authority) ou que são disponibilizados pelo Microsoft Windows.
No runtime, a exceção "Fuso horário '<time zone name>' não existe" será lançada se o nome fornecido não for encontrado na lista da IANA nem no registro do Windows.
No caso de fusos horários em que o horário de verão tem influência, a conversão considera a diferença do horário de verão no Tempo Universal Coordenado. As informações mais recentes disponíveis sobre essa diferença são usadas durante a conversão.
Exemplo 1
Neste exemplo, os nomes de fuso horário para Windows são usados.
Você configura a fonte de dados DSX do tipo Campo calculado. Ela contém esta expressão.
CONCATENATE(
DATETIMEFORMAT( DSY, "O"),
" -> ",
DATETIMEFORMAT( CHANGETIMEZONE(DSY, "E. Europe Standard Time", "Hawaiian Standard Time"), "O")
)
Se você configurar a expressão da fonte de dados DSY do tipo Campo calculado como DATETIMEVALUE ("01-Jun-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN")
, a fonte de dados DSX retornará o texto 2021-06-01T12:55:00.0000000+00:00 -> 2021-05-31T23:55:00.0000000+00:00. Esse texto mostra que a diferença de tempo entre os dois fusos horários fornecidos em 1º de junho é de mais de 24 horas. Assim, o valor de data/hora convertido é um dia a menos do valor de data/hora especificado, porque o fuso horário básico está adiantado no fuso horário de destino.
Se você configurar a expressão da fonte de dados DSY do tipo Campo calculado como DATETIMEVALUE ("01-Dec-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN")
, a fonte de dados DSX retornará o texto 2021-12-01T12:55:00.0000000+00:00 -> 2021-12-01T00:55:00.0000000+00:00. Esse texto mostra que a diferença de tempo entre os dois fusos horários fornecidos em 1º de dezembro é de menos de 24 horas. Assim, o valor de data/hora convertido é igual ao valor de data/hora especificado.
Observação
A mesma expressão retorna uma variação diferente entre os valores de data/hora fornecidos e convertidos para o mesmo par de fusos horários porque outra diferença de horário de verão de Tempo Universal Coordenado é observada para os fusos horários fornecidos em uma determinada data/hora.
Exemplo 2
Neste exemplo, os nomes de fuso horário IANA são usados.
Você configura a fonte de dados DSX do tipo Campo calculado. Ela contém esta expressão.
CONCATENATE(
DATETIMEFORMAT( DSY, "O"),
" -> ",
DATETIMEFORMAT( CHANGETIMEZONE(DSY, "Europe/Athens", "US/Hawaii"), "O")
)
Se você configurar a expressão da fonte de dados DSY do tipo Campo calculado como DATETIMEVALUE ("01-Jun-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN")
, a fonte de dados DSX retornará o texto 2021-06-01T12:55:00.0000000+00:00 -> 2021-05-31T23:55:00.0000000+00:00. Esse texto mostra que a diferença de tempo entre os dois fusos horários fornecidos em 1º de junho é de mais de 24 horas. Assim, o valor de data/hora convertido é um dia a menos do valor de data/hora especificado, porque o fuso horário básico está adiantado no fuso horário de destino.
Se você configurar a expressão da fonte de dados DSY do tipo Campo calculado como DATETIMEVALUE ("01-Dec-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN")
, a fonte de dados DSX retornará o texto 2021-12-01T12:55:00.0000000+00:00 -> 2021-12-01T00:55:00.0000000+00:00. Esse texto mostra que a diferença de tempo entre os dois fusos horários fornecidos em 1º de dezembro é de menos de 24 horas. Assim, o valor de data/hora convertido é igual ao valor de data/hora especificado.
Exemplo 3
Você configura a fonte de dados DSX do tipo Campo calculado. Ela contém esta expressão.
CONCATENATE(
DATETIMEFORMAT( DSY, "O"),
" -> ",
DATETIMEFORMAT( CHANGETIMEZONE(DSY, "US/Hawaii", "Europe/Athens"), "O")
)
Se você configurar a expressão da fonte de dados DSY do tipo Campo calculado como DATETIMEVALUE ("01-Jun-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN")
, a fonte de dados DSX retornará o texto 2021-06-01T12:55:00.0000000+00:00 -> 2021-06-02T01:55:00.0000000+00:00'. Esse texto mostra que a diferença de tempo entre os dois fusos horários fornecidos em 1º de junho é de mais de 24 horas. Assim, o valor de data/hora convertido é um dia a mais do valor de data/hora especificado, porque o fuso horário de destino está adiantado no fuso horário básico.
Exemplo 4
Você pode receber uma marcação de data/hora de uma fonte externa como texto que não contém informações sobre fuso horário. No entanto, você pode saber o fuso horário em que a origem é operada. Por exemplo, você recebe a marcação de data/hora 01/12/2021 12:55:00 de um serviço operado na Espanha. Para salvar corretamente esse valor de data/hora no banco de dados, faça a seguinte conversão:
Configure a fonte de dados DSY do tipo Campo calculado para converter uma marcação de data/hora do texto para o valor de data/hora do Tempo Universal Coordenado.
DATETIMEVALUE ("01/12/2021 12:55:00", "dd/MM/yyyy HH:mm:ss", "ES")
Configure a fonte de dados DSX do tipo Campo calculado para alterar o valor de data/hora convertido para o Tempo Universal Coordenado como o valor de data/hora do fuso horário da fonte externa.
CHANGETIMEZONE(DSY, "Romance Standard Time", "GMT Standard Time")
Observação
Ao usar a função CHANGETIMEZONE
para a conversão de data/hora, lembre-se de que qualquer valor de data/hora será armazenado no banco de dados como o valor no fuso horário do Tempo Universal Coordenado. Antes que esse valor possa ser apresentado nas páginas do aplicativo, ele é transformado. A transformação considera o fuso horário definido como uma zona preferida para o usuário do aplicativo conectado no momento.