Ajuste de fuso horário no terminal

O Terminal Smart possui data e hora configuradas previamente para o horário de Brasília. Em determinados cenários, como a geração de comprovantes destinados a sistemas e instituições localizados em regiões com fusos horários diferentes, a aplicação pode precisar representar o mesmo instante de tempo em outro fuso horário. Nesses casos, recomenda-se realizar a conversão utilizando as APIs de data e hora do Java, garantindo consistência e precisão na exibição e no processamento das informações.

Implementação

A implementação recomendada para conversão de horários entre diferentes fusos horários consiste em cinco etapas:

  1. Obtenha a data e hora atual do Terminal Smart;
  2. Identifique o fuso horário associado ao horário atual do dispositivo;
  3. Selecione o fuso horário que será utilizado pela aplicação;
  4. Converta o mesmo instante para o fuso horário selecionado utilizando a API java.time e a classe ZonedDateTime;
  5. Utilize o horário convertido de acordo com a necessidade da aplicação.
📘

Quando uma aplicação executada no Terminal Smart precisa trabalhar com diferentes fusos horários, a recomendação é utilizar o horário atual do dispositivo e realizar a conversão através da API java.time. A utilização de ZonedDateTime e ZoneId garante que o mesmo instante seja representado corretamente para cada região, tornando a solução mais confiável, simples de manter e adequada para múltiplos cenários de negócio.

private fun getSelectedRegionTimeText( 
deviceNow: ZonedDateTime, 
selectedZoneId: ZoneId, 
formatter: DateTimeFormatter 
): String { 
// Converte o mesmo instante do relógio do dispositivo para o fuso selecionado, 
// garantindo consistência entre regiões, e retorna no formato configurado. 
return deviceNow 
.withZoneSameInstant(selectedZoneId) 
.format(formatter) 

} 

Como a conversão funciona?

Suponha que o terminal esteja configurado para Brasília: 15:00 -03:00

Ao converter para o fuso de Manaus: 14:00 -04:00

O horário exibido muda, mas o instante continua sendo exatamente o mesmo. Em outras palavras, a aplicação continua se referindo ao mesmo momento, apenas representado de acordo com a região selecionada.

Exemplo de configuração

Confira abaixo um exemplo de configuração com os principais fusos horários brasileiros:


val timezones = remember { 
        listOf( 
                  "Ilha de Fernando de Noronha (GMT-2)" to ZoneId.of("America/Noronha"), 
                  "Brasilia (GMT-3)" to ZoneId.of("America/Sao_Paulo"), 
                  "Manaus - AM (GMT-4)" to ZoneId.of("America/Manaus"), 
                  "Rio Branco - AC (GMT-5)" to ZoneId.of("America/Rio_Branco") 
      ) 
} 

Boas práticas

✅ Utilize sempre as classes da API java.time;

✅ Obtenha a hora diretamente do relógio do dispositivo;

✅ Utilize ZoneId para representar regiões;

✅ Utilize withZoneSameInstant() para preservar o instante original durante a conversão;

✅ Evite cálculos manuais utilizando GMT ou offsets fixos.



Did this page help you?