Spec Sistemas Com Java • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 07.1 — LocalDate, LocalTime e LocalDateTime no Java 21

Contexto: LocalDate, LocalTime e LocalDateTime no Java 21 no contexto de Manipulação de Datas e Horas (java.time API).

Requisitos de Execução:

  1. Obter data e hora atuais e formatar no padrão brasileiro dd/MM/yyyy HH:mm:ss.

Resultado Esperado

Data e hora formatadas com DateTimeFormatter.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_1_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Manipulação de Datas e Horas (java.time API)
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

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

public class DataDemo {
    public static void main(String[] args) {
        LocalDateTime agora = LocalDateTime.now();
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
        System.out.println("Data Formatada: " + agora.format(fmt));
    }
}

🔍 Nível 2: Prática

Problema 07.2 — Cálculo de Períodos e Durações com Period e Duration

Contexto: Cálculo de Períodos e Durações com Period e Duration no contexto de Manipulação de Datas e Horas (java.time API).

Requisitos de Execução:

  1. Calcular dias e horas entre duas datas utilizando Period.between e Duration.between.

Resultado Esperado

Diferença temporal calculada com precisão.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_2_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Manipulação de Datas e Horas (java.time API)
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

import java.time.LocalDate;
import java.time.Period;

public class PeriodoDemo {
    public static void main(String[] args) {
        LocalDate d1 = LocalDate.of(2026, 1, 1);
        LocalDate d2 = LocalDate.of(2026, 8, 29);
        Period p = Period.between(d1, d2);
        System.out.printf("Periodo: %d meses e %d dias%n", p.getMonths(), p.getDays());
    }
}

⚡ Nível 3: Integração

Problema 07.3 — Timestamp Global com Instant e Ajuste de Fuso Horário com ZoneId

Contexto: Timestamp Global com Instant e Ajuste de Fuso Horário com ZoneId no contexto de Manipulação de Datas e Horas (java.time API).

Requisitos de Execução:

  1. Converter Instant.now() UTC para o fuso horário de São Paulo ZoneId.of('America/Sao_Paulo').

Resultado Esperado

Data e hora convertidas com tratamento correto de timezone.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_3_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Manipulação de Datas e Horas (java.time API)
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

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

public class TimezoneDemo {
    public static void main(String[] args) {
        Instant agoraUtc = Instant.now();
        ZonedDateTime sp = agoraUtc.atZone(ZoneId.of("America/Sao_Paulo"));
        System.out.println("Sao Paulo Time: " + sp);
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 07.4 — Ajustadores Temporais Customizados com TemporalAdjusters

Contexto: Ajustadores Temporais Customizados com TemporalAdjusters no contexto de Manipulação de Datas e Horas (java.time API).

Requisitos de Execução:

  1. Calcular a próxima segunda-feira útil utilizando TemporalAdjusters.next(DayOfWeek.MONDAY).

Resultado Esperado

Data de vencimento ajustada automaticamente para o próximo dia útil.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_4_SeuNome
  2. Envie na tarefa: Atividade Cap 07 - Manipulação de Datas e Horas (java.time API)
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class TemporalAdjusterDemo {
    public static void main(String[] args) {
        LocalDate hoje = LocalDate.now();
        LocalDate proxSegunda = hoje.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        System.out.println("Proxima Segunda: " + proxSegunda);
    }
}