Definir o fuso horário de uma data em Java
1. Visão geral
Neste tutorial rápido, veremos como definir o fuso horário de uma data usando Java 7, Java 8 e a biblioteca Joda-Time.
2. Usando Java 8
Java 8 introduziua new Date-Time API para trabalhar com datas e horas que eram amplamente baseadas na biblioteca Joda-Time.
A classeInstant da API Java Date Time modela um único ponto instantâneo na linha do tempo em UTC. Isso representa a contagem de nanossegundos desde a época do primeiro momento de 1970 UTC.
Primeiro, obteremos oInstant atual do relógio do sistema eZoneId para um nome de fuso horário:
Instant nowUtc = Instant.now();
ZoneId asiaSingapore = ZoneId.of("Asia/Singapore");
Finalmente,ZoneIdeInstant podem ser utilizados para criar um objeto de data e hora com detalhes de fuso horário. A classeZonedDateTime representa uma data e hora com um fuso horário no sistema de calendário ISO-8601:
ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore);
UsamosZonedDateTime do Java 8 para representar uma data e hora com um fuso horário.
3. Usando Java 7
No Java 7, definir o fuso horário é um pouco complicado. A classeDate (que representa um instante específico no tempo) não contém nenhuma informação de fuso horário.
Primeiro, vamos obter a data UTC atual e um objetoTimeZone:
Date nowUtc = new Date();
TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);
No Java 7, precisamos usar a classeCalendar para representar uma data com um fuso horário.
Finalmente, podemos criar umnowUtc Calendar comasiaSingapore TimeZonee definir o tempo:
Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore);
nowAsiaSingapore.setTime(nowUtc);
É recomendável evitar a API de data e hora do Java 7 em favor da API de data e hora do Java 8 ou a biblioteca Joda-Time.
4. Usando Joda-Time
Se o Java 8 não for uma opção,we can still get the same kind of result from Joda-Time, um padrão de fato para operações de data e hora no mundo pré-Java 8.
Primeiro, precisamos adicionarJoda-Time dependency apom.xml:
joda-time
joda-time
2.10
Para representar um ponto exato na linha do tempo, podemos usar o pacoteInstant fromorg.joda.time. Internamente, a classe mantém um dado, o instante em milissegundos da época do Java de 1970-01-01T00: 00: 00Z:
Instant nowUtc = Instant.now();
UsaremosDateTimeZone para representar um fuso horário (para o id de fuso horário especificado):
DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");
Agora, o temponowUtc será convertido em um objetoDateTime usando as informações de fuso horário:
DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);
É assim que a API do Joda-time pode ser usada para combinar informações de data e fuso horário.
5. Conclusão
Neste artigo, descobrimos como definir o fuso horário em Java usando Java 7, 8 e Joda-Time API. Para saber mais sobre o suporte de data e hora do Java 8, verifiqueour Java 8 date-time intro.
Como sempre, o snippet de código está disponível emGitHub repository.