Java Dica de código

Dica de Código: Trabalhando com Data e Hora no Java

Nessa dica de código veremos como podemos trabalhar com data e hora no Java, para isso veremos as classes do pacote java.time.

há 9 meses 3 semanas

Formação Desenvolvedor Java
Conheça a formação em detalhes

Trabalhar com data e hora é fundamental em muitos sistemas e aplicações. No Java, temos diversas classes e métodos que nos permitem manipular data e hora de forma simples e eficiente.

O Java possui uma extensa biblioteca de classes para manipulação de datas. Porém a partir do Java 8, a API de datas foi reestruturada e simplificada. A nova API de datas é baseada no JSR 310, que é um padrão para manipulação de datas e horas. A nova API de data está disponível no pacote java.time e possui classes para representar datas, horas, intervalos de tempo, etc.

Neste post, vamos aprender como trabalhar com a API de data e hora do Java, utilizando as classes LocalDate, LocalTime, LocalDateTime e ZonedDateTime.

Desenvolvedor Java
Formação Desenvolvedor Java
Conhecer a formação

Trabalhando somente com a data no Java

import java.time.LocalDate;

public class ExemploData {
  public static void main(String[] args) {
    /*
     * Para trabalharmos com datas, devemos utilizar a classe LocalDate.
     * Esta classe representa uma data, sem hora, minuto, segundo, etc.
     * O método estático now() retorna a data atual.
     */
    var dataAtual = LocalDate.now();
    System.out.println("Data atual: " + dataAtual); // 2023-06-22

    /*
     * Para criar uma data específica, devemos utilizar o método estático
     * of() da classe LocalDate. Este método recebe três parâmetros:
     * ano, mês e dia.
     */
    var dataEspecifica = LocalDate.of(2019, 10, 10);
    System.out.println("Data específica: " + dataEspecifica); // 2019-10-10

    /*
     * Podemos realizar manipulações com datas, como por exemplo, adicionar
     * ou subtrair dias, meses ou anos. Com os métodos plusDays(), plusMonths(),
     * plusYears(), minusDays(), minusMonths() e minusYears().
     */
    var dataAlterada = dataEspecifica.plusDays(10);
    System.out.println("Data alterada: " + dataAlterada); // 2019-10-20
  }
}

Trabalhando somente com a hora no Java

import java.time.LocalTime;

public class ExemploTempo {
  public static void main(String[] args) {
    /*
     * Para trabalharmos com horas, devemos utilizar a classe LocalTime.
     * Esta classe representa uma hora, sem data, mês, ano, etc.
     * O método estático now() retorna a hora atual.
     */
    var horaAtual = LocalTime.now();
    System.out.println("Hora atual: " + horaAtual); // 14:02:10

    /*
     * Para criar uma hora específica, devemos utilizar o método estático
     * of() da classe LocalTime. Este método recebe três parâmetros:
     * hora, minuto e segundo.
     */
    var horaEspecifica = LocalTime.of(10, 10, 10);
    System.out.println("Hora específica: " + horaEspecifica); // 10:10:10

    /*
     * Podemos realizar manipulações com horas, como por exemplo, adicionar
     * ou subtrair horas, minutos ou segundos. Com os métodos plusHours(),
     * plusMinutes(), plusSeconds(), minusHours(), minusMinutes() e
     * minusSeconds().
     */
    var horaAlterada = horaEspecifica.plusHours(10);
    System.out.println("Hora alterada: " + horaAlterada); // 20:10:10
  }
}

Trabalhando com a data e hora no Java

import java.time.LocalDateTime;

public class ExemploDataHora {
  public static void main(String[] args) {
    /*
     * Para trabalharmos com datas e horas, devemos utilizar a classe
     * LocalDateTime. Esta classe representa uma data e hora, sem timezone.
     * O método estático now() retorna a data e hora atual.
     */
    var dataHoraAtual = LocalDateTime.now();
    System.out.println("Data e hora atual: " + dataHoraAtual); // 2023-06-22T14:02:10

    /*
     * Para criar uma data e hora específica, devemos utilizar o método
     * estático of() da classe LocalDateTime. Este método recebe seis
     * parâmetros: ano, mês, dia, hora, minuto e segundo.
     */
    var dataHoraEspecifica = LocalDateTime.of(2019, 10, 10, 10, 10, 10);
    System.out.println("Data e hora específica: " + dataHoraEspecifica); // 2019-10-10T10:10:10

    /*
     * Podemos realizar manipulações com datas e horas, como por exemplo,
     * adicionar ou subtrair dias, meses, anos, horas, minutos ou segundos.
     * Com os métodos plusDays(), plusMonths(), plusYears(), plusHours(),
     * plusMinutes(), plusSeconds(), minusDays(), minusMonths(), minusYears(),
     * minusHours(), minusMinutes() e minusSeconds().
     */
    var dataHoraAlterada = dataHoraEspecifica.plusDays(10);
    System.out.println("Data e hora alterada: " + dataHoraAlterada); // 2019-10-20T10:10:10
  }
}

Formatando data e hora no Java

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class ExemploFomatarDataHora {
  public static void main(String[] args) {
    /*
     * Também é possível formatar a data e hora de acordo com o padrão
     * informado, utilizando a classe DateTimeFormatter. Esta classe possui um método
     * estático para formatar a data e hora.
     * Primeiro, devemos criar um objeto da classe DateTimeFormatter
     * informando o padrão que desejamos utilizar para formatar a data e hora.
     */
    var formatador = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");

    /*
     * Depois, devemos utilizar o método format() da classe DateTimeFormatter
     * para formatar a data e hora. Este método recebe um objeto da classe
     * LocalDateTime ou LocalDate ou LocalTime e retorna uma String com a data
     * e hora formatada.
     */
    var dataHora = LocalDateTime.of(2019, 10, 10, 10, 10, 10);
    var dataHoraFormatada = formatador.format(dataHora);
    System.out.println("Data e hora formatada: " + dataHoraFormatada); // 10/10/2019 10:10:10
  }
}

Trabalhando com timezone no Java

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class ExemploDataHoraComTimezone {
  public static void main(String[] args) {
    /*
     * Também é possível trabalhar com timezone utilizando a classe
     * ZonedDateTime. Esta classe representa uma data e hora, com timezone.
     * O método estático now() retorna a data e hora atual. O timezone
     * utilizado é o timezone padrão do sistema operacional.
     */
    var dataHoraAtual = ZonedDateTime.now(); // 2023-06-22T14:02:10-03:00[America/Fortaleza]
    System.out.println(dataHoraAtual);

    /*
     * Para criar uma data e hora específica, devemos utilizar o método
     * estático of() da classe ZonedDateTime. Este método recebe sete
     * parâmetros: ano, mês, dia, hora, minuto, segundo e timezone.
     * O timezone deve ser informado utilizando a classe ZoneId.
     */
    var timezone = ZoneId.of("America/Sao_Paulo");
    var dataHoraEspecifica = ZonedDateTime.of(2019, 10, 10, 10, 10, 10, 0, timezone);
    System.out.println(dataHoraEspecifica); // 2019-10-10T10:10:10-03:00[America/Sao_Paulo]

    /*
     * Podemos converter uma data e hora de um timezone para outro utilizando
     * o método withZoneSameInstant().
     */
    var dataHoraAlterada = dataHoraEspecifica.withZoneSameInstant(ZoneId.of("America/New_York"));
    System.out.println(dataHoraAlterada); // 2019-10-10T09:10:10-04:00[America/New_York]

    /*
     * Podemos obter o timezone do sistema utilizando o método estático
     * systemDefault() da classe ZoneId.
     */
    var timezoneSistema = ZoneId.systemDefault();
    System.out.println(timezoneSistema); // America/Fortaleza
  }
}

Autor(a) do artigo

Cleyson Lima
Cleyson Lima

Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python.

Todos os artigos

Artigos relacionados Ver todos