Math e Datas
Esta lição cobre operações matemáticas e tratamento de data/hora em Java.
Classe Math
A classe Math fornece métodos comuns de operação matemática, todos são estáticos.
Métodos Comuns
| Método | Descrição | Exemplo |
|---|---|---|
abs() |
Valor absoluto | Math.abs(-5) → 5 |
max() |
Máximo | Math.max(3, 5) → 5 |
min() |
Mínimo | Math.min(3, 5) → 3 |
ceil() |
Arredondar para cima | Math.ceil(3.2) → 4.0 |
floor() |
Arredondar para baixo | Math.floor(3.8) → 3.0 |
round() |
Arredondar para o mais próximo | Math.round(3.5) → 4 |
sqrt() |
Raiz quadrada | Math.sqrt(16) → 4.0 |
pow() |
Potência | Math.pow(2, 3) → 8.0 |
random() |
Número aleatório | Math.random() → [0.0, 1.0) |
Exemplo: Usando Math
JAVA
public class MathDemo {
public static void main(String[] args) {
// Valor absoluto
System.out.println("abs(-5) = " + Math.abs(-5)); // 5
// Máximo e mínimo
System.out.println("max(3, 5) = " + Math.max(3, 5)); // 5
System.out.println("min(3, 5) = " + Math.min(3, 5)); // 3
// Arredondamento
System.out.println("ceil(3.2) = " + Math.ceil(3.2)); // 4.0
System.out.println("floor(3.8) = " + Math.floor(3.8)); // 3.0
System.out.println("round(3.5) = " + Math.round(3.5)); // 4
// Operações de potência
System.out.println("sqrt(16) = " + Math.sqrt(16)); // 4.0
System.out.println("pow(2, 3) = " + Math.pow(2, 3)); // 8.0
}
}
Gerando Números Aleatórios
JAVA
public class RandomDemo {
public static void main(String[] args) {
// Número aleatório entre 0.0 e 1.0
double r1 = Math.random();
System.out.println("Aleatório: " + r1);
// Número inteiro aleatório entre 1 e 100
int r2 = (int) (Math.random() * 100) + 1;
System.out.println("1-100 aleatório: " + r2);
// Número aleatório em intervalo (min a max)
int min = 10, max = 50;
int r3 = (int) (Math.random() * (max - min + 1)) + min;
System.out.println(min + "-" + max + " aleatório: " + r3);
}
}
Constantes
| Constante | Descrição | Valor |
|---|---|---|
Math.PI |
Pi | 3.141592653589793 |
Math.E |
Número de Euler | 2.718281828459045 |
Exemplo: Calcular Área do Círculo
JAVA
public class CircleArea {
public static double area(double radius) {
return Math.PI * Math.pow(radius, 2);
}
public static void main(String[] args) {
double radius = 5;
System.out.printf("Área do círculo com raio %.1f: %.2f%n", radius, area(radius));
// Área do círculo com raio 5.0: 78.54
}
}
API de Data/Hora (Java 8+)
Java 8 introduziu uma nova API de data/hora que é mais fácil de usar.
LocalDate: Data
JAVA
import java.time.LocalDate;
public class LocalDateDemo {
public static void main(String[] args) {
// Hoje
LocalDate today = LocalDate.now();
System.out.println("Hoje: " + today); // 2026-06-24
// Data específica
LocalDate birthday = LocalDate.of(2000, 1, 15);
System.out.println("Aniversário: " + birthday);
// Obter campos
System.out.println("Ano: " + today.getYear());
System.out.println("Mês: " + today.getMonthValue());
System.out.println("Dia: " + today.getDayOfMonth());
System.out.println("Dia da semana: " + today.getDayOfWeek());
}
}
LocalTime: Hora
JAVA
import java.time.LocalTime;
public class LocalTimeDemo {
public static void main(String[] args) {
// Agora
LocalTime now = LocalTime.now();
System.out.println("Agora: " + now); // 14:30:45.123
// Hora específica
LocalTime meeting = LocalTime.of(14, 30);
System.out.println("Reunião: " + meeting);
// Obter campos
System.out.println("Hora: " + now.getHour());
System.out.println("Minuto: " + now.getMinute());
System.out.println("Segundo: " + now.getSecond());
}
}
LocalDateTime: Data e Hora
JAVA
import java.time.LocalDateTime;
public class LocalDateTimeDemo {
public static void main(String[] args) {
// Data e hora atual
LocalDateTime now = LocalDateTime.now();
System.out.println("Agora: " + now);
// Data e hora específica
LocalDateTime meeting = LocalDateTime.of(2026, 6, 25, 14, 30);
System.out.println("Reunião: " + meeting);
}
}
Aritmética de Datas
JAVA
import java.time.LocalDate;
public class DateCalc {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
// Adicionar/subtrair dias
LocalDate tomorrow = today.plusDays(1);
LocalDate lastWeek = today.minusWeeks(1);
LocalDate nextMonth = today.plusMonths(1);
System.out.println("Hoje: " + today);
System.out.println("Amanhã: " + tomorrow);
System.out.println("Semana passada: " + lastWeek);
System.out.println("Próximo mês: " + nextMonth);
// Comparação de datas
LocalDate date1 = LocalDate.of(2026, 1, 1);
LocalDate date2 = LocalDate.of(2026, 12, 31);
System.out.println("date1 antes de date2: " + date1.isBefore(date2));
System.out.println("date1 depois de date2: " + date1.isAfter(date2));
}
}
Formatação de Datas
JAVA
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormat {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// Formatar
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = now.format(formatter);
System.out.println("Formatado: " + formatted);
// Analisar
LocalDateTime parsed = LocalDateTime.parse("2026-06-25 14:30:00", formatter);
System.out.println("Analisado: " + parsed);
}
}
Padrões de Formato Comuns
| Padrão | Descrição | Exemplo |
|---|---|---|
yyyy |
Ano | 2026 |
MM |
Mês | 06 |
dd |
Dia | 25 |
HH |
Hora (24h) | 14 |
mm |
Minuto | 30 |
ss |
Segundo | 45 |
Exemplo: Calcular Idade
JAVA
import java.time.LocalDate;
import java.time.Period;
public class AgeCalculator {
public static int calculateAge(LocalDate birthday) {
LocalDate today = LocalDate.now();
Period period = Period.between(birthday, today);
return period.getYears();
}
public static void main(String[] args) {
LocalDate birthday = LocalDate.of(2000, 1, 15);
int age = calculateAge(birthday);
System.out.println("Idade: " + age);
}
}
Exemplo: Calcular Dias Entre Datas
JAVA
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class DaysBetween {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2026, 1, 1);
LocalDate end = LocalDate.of(2026, 12, 31);
long days = ChronoUnit.DAYS.between(start, end);
System.out.println("Dias entre: " + days); // 364
}
}
❓ Perguntas Frequentes
P: Qual é o intervalo de Math.random()? A: [0.0, 1.0)—inclui 0.0 mas exclui 1.0.
P: Qual é a diferença entre LocalDate e Date? A: LocalDate é a nova API do Java 8—imutável e thread-safe. Date é a API antiga—mutável e não thread-safe. LocalDate é recomendado.
P: Como obter o timestamp atual? A: Use
System.currentTimeMillis()para milissegundos, ouInstant.now()para um objeto Instant.
📖 Resumo
- A classe Math fornece métodos de operação matemática, todos estáticos
- Métodos comuns: abs/max/min/ceil/floor/round/sqrt/pow/random
- API de data do Java 8: LocalDate/LocalTime/LocalDateTime
- Use métodos plus/minus para aritmética de datas
- Use DateTimeFormatter para formatação de datas
📝 Exercícios
- Números aleatórios: Gere 10 números aleatórios entre 1-100, encontre o máximo, mínimo e média
- Cálculo de data: Calcule quantos dias faltam de hoje até 1º de janeiro de 2027
- Calculadora de idade: Insira uma data de nascimento e calcule a idade e dias até o próximo aniversário
Próxima Lição
Na próxima lição, aprenderemos sobre Prática: Processamento de Strings — aplicando conhecimentos relacionados a strings.



