No Java, algumas funcionalidades não estão disponíveis implicitamente no Java (ficando fora das classes), sendo necessário importar essas funcionalidades (ou classes relacionadas) explicitamente. É o caso da funcionalidade para datas e horas.
A API moderna de data/hora (desde Java 8):
import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;Esta necessidade de importação explícita é uma característica do Java que ajuda a:
Vamos ver um exemplo usando a classe Date do pacote java.util:
// Importando a classe Date do pacote java.util import java.util.Date; public class ExemploDate { public static void main(String[] args) { // Criando uma instância de Date que representa a data e hora atual Date dataAtual = new Date(); // Imprimindo a data e hora atual System.out.println("Data e hora atual: " + dataAtual); // Obtendo o timestamp (milissegundos desde 01/01/1970) long timestamp = dataAtual.getTime(); System.out.println("Timestamp: " + timestamp + " ms"); // Criando uma data a partir de um timestamp específico Date dataEspecifica = new Date(1000000000000L); // 09/09/2001 01:46:40 System.out.println("Data específica: " + dataEspecifica); } }
Data e hora atual: Thu May 09 14:30:25 BRT 2025
Timestamp: 1747045825384 ms
Data específica: Sun Sep 09 01:46:40 BRT 2001
Nota: A classe Date da API antiga (java.util.Date) está em grande parte obsoleta. Para novas aplicações, é recomendado usar as classes do pacote java.time introduzidas no Java 8.
Agora, vamos ver como trabalhar com a API moderna de data/hora do Java 8:
// Importando classes da API moderna de data/hora import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class ExemploDataHoraModerna { public static void main(String[] args) { // Obtendo a data atual LocalDate dataAtual = LocalDate.now(); System.out.println("Data atual: " + dataAtual); // Obtendo a hora atual LocalTime horaAtual = LocalTime.now(); System.out.println("Hora atual: " + horaAtual); // Obtendo data e hora atuais LocalDateTime dataHoraAtual = LocalDateTime.now(); System.out.println("Data e hora atuais: " + dataHoraAtual); // Criando uma data específica LocalDate aniversario = LocalDate.of(1990, 5, 15); System.out.println("Aniversário: " + aniversario); // Formatando uma data DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String dataFormatada = dataAtual.format(formatador); System.out.println("Data formatada: " + dataFormatada); // Formatando data e hora DateTimeFormatter formatadorDataHora = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); String dataHoraFormatada = dataHoraAtual.format(formatadorDataHora); System.out.println("Data e hora formatadas: " + dataHoraFormatada); } }
Data atual: 2025-05-09
Hora atual: 14:32:45.123456789
Data e hora atuais: 2025-05-09T14:32:45.123456789
Aniversário: 1990-05-15
Data formatada: 09/05/2025
Data e hora formatadas: 09/05/2025 14:32:45
Scanner é usado para receber dados de entrada do usuário. Para usá-lo, precisamos importá-lo:
// Importando a classe Scanner import java.util.Scanner; public class ExemploScanner { public static void main(String[] args) { // Criando um objeto Scanner para ler entrada do teclado Scanner entrada = new Scanner(System.in); System.out.print("Digite seu nome: "); // Lendo uma linha de texto String nome = entrada.nextLine(); System.out.print("Digite sua idade: "); // Lendo um número inteiro int idade = entrada.nextInt(); // Consumindo a quebra de linha pendente scanner.nextLine(); System.out.print("Digite sua profissão: "); String profissao = entrada.nextLine(); // Exibindo as informações System.out.println("\nInformações:"); System.out.println("Nome: " + nome); System.out.println("Idade: " + idade); System.out.println("Profissão: " + profissao); // Fechando o scanner para liberar recursos entrada.close(); } }
Digite seu nome: João Silva
Digite sua idade: 28
Digite sua profissão: Programador
Informações:
Nome: João Silva
Idade: 28
Profissão: Programador
Os métodos nextLine(), nextDouble() e nextInt() são usados para ler entrada de dados do usuário através do Scanner em Java.
import java.util.Scanner;
public class ExemploMetodosScanner {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
// Exemplo de nextLine()
System.out.print("Digite seu nome completo: ");
String nomeCompleto = entrada.nextLine();
System.out.println("Nome digitado: " + nomeCompleto);
// Exemplo de nextInt()
System.out.print("Digite sua idade: ");
int idade = entrada.nextInt();
System.out.println("Idade digitada: " + idade);
// ATENÇÃO: nextInt() não consome a quebra de linha!
// É necessário consumir a quebra de linha pendente
entrada.nextLine();
// Sem o scanner.nextLine() acima, o próximo nextLine()
// capturaria apenas a quebra de linha pendente
System.out.print("Digite sua cidade: ");
String cidade = entrada.nextLine();
System.out.println("Cidade digitada: " + cidade);
// Exemplo de nextDouble()
System.out.print("Digite sua altura (em metros): ");
double altura = entrada.nextDouble();
System.out.println("Altura digitada: " + altura + " metros");
entrada.close();
}
}
Digite seu nome completo: Maria Silva Santos
Nome digitado: Maria Silva Santos
Digite sua idade: 35
Idade digitada: 35
Digite sua cidade: São Paulo
Cidade digitada: São Paulo
Digite sua altura (em metros): 1.65
Altura digitada: 1.65 metros
Problema comum: Se você usar nextInt() ou nextDouble() e depois tentar usar nextLine(), pode ter problemas. Isso ocorre porque métodos como nextInt() não consomem a quebra de linha (Enter) que o usuário pressiona, então o próximo nextLine() vai capturar apenas essa quebra de linha vazia.
Solução: Sempre use um scanner.nextLine() extra após chamar nextInt() ou nextDouble() se você planeja usar nextLine() em seguida.
Teste seus conhecimentos sobre o conceito de import e classes Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: