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
    }
}
▶ Experimente

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
    }
}
▶ Experimente

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, ou Instant.now() para um objeto Instant.

📖 Resumo

📝 Exercícios

  1. Números aleatórios: Gere 10 números aleatórios entre 1-100, encontre o máximo, mínimo e média
  2. Cálculo de data: Calcule quantos dias faltam de hoje até 1º de janeiro de 2027
  3. 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.

100%