Dominando Data e Hora em Java: SimpleDateFormat, Data Atual e Comparação de Datas
Este tutorial abrange essenciais de trabalho com datas e horas em Java, incluindo:
- Exibindo data e hora atuais
- Formatando e parseando datas com
SimpleDateFormat - Comparando duas datas
Objeto Date Java representa seguintes componentes:

- O ano (2 ou 4 dígitos)
- O mês (numérico, abreviação de 3 letras ou nome completo)
- O dia do mês
- O dia da semana (ex.: Dom, Seg, Ter)
Computadores suportam muitos parâmetros adicionais relacionados a data, discutidos nas próximas seções.
Exibir Data Atual em Java
Classe java.util.Date do Java provê forma simples de obter data e hora atuais do sistema. Exemplo mínimo:
import java.util.Date;
class ExemploData {
public static void main(String[] args) {
Date atual = new Date();
System.out.println(atual.toString());
}
}
Saída:
Wed Nov 29 06:36:22 UTC 2017
Saída usa formato padrão toString(). Para apresentar data em layout customizado, precisa formatar explicitamente.
SimpleDateFormat: Parsear e Formatar Datas
Java formata datas usando strings de padrão que mapeiam letras a componentes específicos de data. Tabela de referência:
| Letra | Componente de Data/Hora | Exemplo |
|---|---|---|
| G | Designador de era | AD |
| y | Ano | 2018 |
| M | Mês no ano | Julho, Jul, 07 |
| w | Semana no ano | 27 |
| W | Semana no mês | 2 |
| D | Dia no ano | 189 |
| d | Dia no mês | 10 |
| F | Dia da semana no mês | 2 |
| E | Nome do dia na semana | Terça, Ter |
| u | Número do dia da semana (1=Seg … 7=Dom) | 1 |
| a | Marcador AM/PM | PM |
| H | Hora no dia (0-23) | 0 |
| k | Hora no dia (1-24) | 24 |
| K | Hora em am/pm (0-11) | 0 |
| h | Hora em am/pm (1-12) | 12 |
| m | Minuto na hora | 30 |
| s | Segundo no minuto | 55 |
| S | Milisegundo | 978 |
| z | Fuso horário | Pacific Standard Time; PST; GMT-08:00 |
| Z | Offset de fuso horário | -0800 |
| X | Fuso horário | -08, -0800, -08:00 |
Consulte esta tabela sempre que precisar construir string de formato específica.
Usando SimpleDateFormat
Classe SimpleDateFormat permite definir padrão para formatar ou parsear datas. Exemplos:
- Formato desejado: 2012.10.23 20:20:45 PST → padrão
yyyy.MM.dd HH:mm:ss zzz - Formato desejado: 09:30:00 AM 23-Mai-2012 → padrão
hh:mm:ss a dd-MMM-yyyy
Dica: Atenção à capitalização – usar M para meses e m para minutos é essencial.
import java.text.SimpleDateFormat;
import java.util.Date;
class TesteFormatoDatas {
public static void main(String[] args) {
Date agora = new Date();
System.out.println(agora);
String padrao = "hh:mm:ss a dd-MMM-yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(padrao);
System.out.println(sdf.format(agora));
}
}
Saída:
Wed Nov 29 06:31:41 UTC 2017 06:31:41 AM 29-Nov-2017
Comparando Datas

Método mais confiável para comparação de datas em Java é compareTo(), que retorna valor negativo se primeira data anterior, zero se igual, positivo se posterior.
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
class TesteComparacaoDatas {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date data1 = sdf.parse("20-08-1981");
Date data2 = sdf.parse("12-10-2012");
System.out.println("Data1 : " + sdf.format(data1));
System.out.println("Data2 : " + sdf.format(data2));
if (data1.compareTo(data2) > 0) {
System.out.println("Data 1 ocorre após Data 2");
} else if (data1.compareTo(data2) < 0) {
System.out.println("Data 1 ocorre antes Data 2");
} else {
System.out.println("Ambas datas são iguais");
}
}
}
Saída:
Data1 : 20-08-1981 Data2 : 12-10-2012 Data 1 ocorre antes Data 2
Java
- Calculando Tensão e Corrente em Circuitos DC Reativos
- Obter Data e Hora Atuais em Python: Guia Prático
- Python: Obter Hora Atual e Dados de Fuso Horário com Facilidade
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Data e Hora em Java: Construtores, Métodos e Boas Práticas
- Guia Completo de Data e Hora em C++
- Java 10 Lança Versionamento Baseado em Tempo para Atualizações Bianuais Previsíveis
- Java 8: A Nova API Robusta de Data e Hora