logo

Data e hora Java

Os pacotes java.time, java.util, java.sql e java.text contêm classes para representar data e hora. As classes a seguir são importantes para lidar com datas em Java.

API de data/hora Java 8

Java introduziu uma nova API de data e hora desde Java 8. O pacote java.time contém classes de data e hora Java 8.

API clássica de data/hora

Mas a API Java Date clássica ou antiga também é útil. Vamos ver a lista de classes clássicas de data e hora.

Formatando data e hora

Podemos formatar data e hora em Java usando as seguintes classes:

APIs Java de data e hora

Java fornece a funcionalidade de data e hora com a ajuda de dois pacotes java.time e java.util. O pacote java.time foi introduzido no Java 8 e as classes recém-introduzidas tentam superar as deficiências das classes legadas java.util.Date e java.util.Calendar.

Classes clássicas de API de data e hora

As classes principais antes do lançamento do Java 8 eram:

lista imutável

Java.lang.System: A classe fornece o método currentTimeMillis() que retorna a hora atual em milissegundos. Mostra a data e hora atuais em milissegundos a partir de 1º de janeiro de 1970.

java.util.Data: É utilizado para mostrar um instante de tempo específico, com unidade de milissegundo.

java.util.Calendar: É uma classe abstrata que fornece métodos para conversão entre instâncias e manipulação dos campos do calendário de diferentes maneiras.

java.text.SimpleDateFormat: É uma classe usada para formatar e analisar as datas de uma maneira predefinida ou em um padrão definido pelo usuário.

java.util.TimeZone: Representa um deslocamento de fuso horário e também calcula o horário de verão.

Desvantagens das APIs de data/hora existentes

    Segurança do fio:As classes existentes, como Date e Calendar, não fornecem segurança de thread. Conseqüentemente, isso leva a problemas de simultaneidade difíceis de depurar que precisam ser resolvidos pelos desenvolvedores. As novas APIs de data e hora do Java 8 fornecem segurança de thread e são imutáveis, evitando assim o problema de simultaneidade dos desenvolvedores.Design de API ruim:As APIs clássicas de data e calendário não fornecem métodos para executar funcionalidades básicas do dia a dia. As classes Date e Time introduzidas no Java 8 são centradas em ISO e fornecem vários métodos diferentes para realizar operações relacionadas a data, hora, duração e períodos.Tratamento difícil de fuso horário:Lidar com o fuso horário usando as classes clássicas de Data e Calendário é difícil porque os desenvolvedores deveriam escrever a lógica para isso. Com as novas APIs, o tratamento do fuso horário pode ser feito facilmente com APIs Local e ZonedDate/Time.

Nova API de data e hora em Java 8

A nova API de data ajuda a superar as desvantagens mencionadas acima com as classes legadas. Inclui as seguintes aulas:

java.time.LocalDate: Representa um ano, mês e dia no calendário ISO e é útil para representar uma data sem hora. Ele pode ser usado para representar apenas informações de data, como data de nascimento ou data de casamento.

java.time.LocalTime: Ele lida apenas com o tempo. É útil para representar horários do dia baseados em humanos, como horários de filmes ou horários de abertura e fechamento da biblioteca local.

java.time.LocalDateTime: Ele lida com data e hora, sem fuso horário. É uma combinação de LocalDate com LocalTime.

java.time.ZonedDateTime: Ele combina a classe LocalDateTime com as informações de zona fornecidas na classe ZoneId. Ele representa um carimbo de data e hora completo junto com informações de fuso horário.

java.time.OffsetTime: Ele lida com o horário com um deslocamento de fuso horário correspondente de Greenwich/UTC, sem um ID de fuso horário.

java.time.OffsetDateTime: Ele lida com uma data e hora com um deslocamento de fuso horário correspondente de Greenwich/UTC, sem um ID de fuso horário.

java.time.Clock: Ele fornece acesso ao instante, data e hora atuais em qualquer fuso horário. Embora o uso da classe Clock seja opcional, esse recurso nos permite testar seu código para outros fusos horários, ou utilizando um relógio fixo, onde o horário não muda.

java.time.Instant : Representa o início de um nanossegundo na linha do tempo (desde EPOCH) e é útil para gerar um carimbo de data/hora para representar o tempo da máquina. Um instante que ocorre antes da época tem um valor negativo e um instante que ocorre depois da época tem um valor positivo.

java.time.Duration : A diferença entre dois instantes é medida em segundos ou nanossegundos e não usa construções baseadas em datas, como anos, meses e dias, embora a classe forneça métodos que convertem em dias, horas e minutos.

java.time.Period: É usado para definir a diferença entre datas em valores baseados em datas (anos, meses, dias).

java.time.ZoneId : Ele indica um identificador de fuso horário e fornece regras para conversão entre Instant e LocalDateTime.

java.time.ZoneOffset : Ele descreve um deslocamento de fuso horário em relação ao horário de Greenwich/UTC.

java.time.format.DateTimeFormatter : Ele vem com vários formatadores predefinidos, ou podemos definir o nosso próprio. Possui o método parse() ou format() para analisar e formatar os valores de data e hora.