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:
- Obtenha a data e hora atual do Terminal Smart;
- Identifique o fuso horário associado ao horário atual do dispositivo;
- Selecione o fuso horário que será utilizado pela aplicação;
- Converta o mesmo instante para o fuso horário selecionado utilizando a API java.time e a classe
ZonedDateTime; - 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
ZonedDateTimeeZoneIdgarante 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.
Updated 2 months ago