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.
- Classe java.time.LocalDate
- Classe java.time.LocalTime
- Classe java.time.LocalDateTime
- classe java.time.MonthDay
- Classe java.time.OffsetTime
- Classe java.time.OffsetDateTime
- Classe java.time.Clock
- Classe java.time.ZonedDateTime
- Classe java.time.ZoneId
- Classe java.time.ZoneOffset
- classe java.time.Year
- Classe java.time.YearMonth
- classe java.time.Period
- classe java.time.Duration
- classe java.time.Instant
- enumeração java.time.DayOfWeek
- enumeração java.time.Month
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.
- Classe java.util.Date
- classe java.sql.Date
- Classe java.util.Calendar
- classe java.util.GregorianCalendar
- Classe java.util.TimeZone
- classe java.sql.Time
- classe java.sql.Timestamp
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
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.