1
resposta

[Projeto] Controle de expediente

package com.vn.challenge5;

import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.InputMismatchException;
import java.util.Scanner;

public class ControleExpediente {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");

        System.out.println("Digite o horário de entrada (HH:mm): ");
        LocalTime entrada = LocalTime.parse(sc.next(), formatter);

        int cargaHoraria = 0;

        while (true) {
            try {
                System.out.println("Digite a carga horária de trabalho (em horas): ");
                cargaHoraria = sc.nextInt();
                break;
            } catch (InputMismatchException e) {
                System.out.println("Digite um número válido para a carga horária.");
                sc.nextLine();
            }
        }

        System.out.println("Digite o horário de saída: ");
        LocalTime saida = LocalTime.parse(sc.next(), formatter);

        LocalTime saidaPrevista = entrada.plusHours(cargaHoraria);
        Duration diferenca = Duration.between(saidaPrevista, saida);

        long horas = diferenca.toHours();
        long minutos = diferenca.toMinutesPart();

        String sinal = (horas > 0 || minutos > 0) ? "+" : (horas < 0 || minutos < 0) ? "-" : "";
        String saldoFormatado = (horas == 0 && minutos == 0)
                ? "0h 0min"
                : sinal + Math.abs(horas) + "h " + Math.abs(minutos) + "min";

        System.out.println("""
                Horário de entrada: %s
                Horário de saída previsto: %s
                Horário de saída real: %s
                Saldo de horas: %s
                """.formatted(
                entrada.format(formatter),
                saidaPrevista.format(formatter),
                saida.format(formatter),
                saldoFormatado
        ));

        sc.close();
    }
}
1 resposta

Olá, Vinicius! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso da classe Duration para calcular diferenças de tempo com Java, utilizou muito bem o DateTimeFormatter para formatar horários e ainda compreendeu a importância da validação de entrada com try catch para garantir robustez no programa.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Sugestão de conteúdo para você mergulhar ainda mais no tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!