1
resposta

Controle De Expediente

public class dataHora {

    public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
        System.out.print("Digite o horário de entrada (HH:mm): ");
        LocalTime entrada = LocalTime.parse(scanner.next(), formatter);

        System.out.println("Digite a carga horária diária (em horas):");
        Duration cargaHorariaD = Duration.ofHours(Long.parseLong(scanner.next()));

        System.out.println("Digite o horário real de saída (HH:mm):");
        LocalTime horarioRealSaida = LocalTime.parse(scanner.next(), formatter);

       Duration saldoDeHoras = Duration.between(entrada, horarioRealSaida);

       Duration saldo = saldoDeHoras.minus(cargaHorariaD).abs();

        System.out.println("Horário de entrada: " + entrada.format(formatter));
        System.out.println("Horário de saída previsto: " + entrada.plus(cargaHorariaD).format(formatter));
        System.out.println("Horário real de saída: " + horarioRealSaida.format(formatter));
        System.out.println("Saldo de horas: " + saldo.toHours() + "h " + saldo.toMinutesPart() + " min");

    }
}
1 resposta

Oi, João! Como vai?

Agradeço por compartilhar.

Gostei bastante de como você utilizou LocalTime, Duration e o DateTimeFormatter para organizar os horários. A forma como você calculou o saldo com between e depois ajustou com minus e abs ficou bem clara e funcional.

Uma dica interessante para o futuro é utilizar o método isAfter ou isBefore pra validar cenários, como quando o horário de saída é menor que o de entrada.


LocalTime entrada = LocalTime.of(9, 0);
LocalTime saida = LocalTime.of(8, 0);

if (saida.isBefore(entrada)) {
    System.out.println("Horario de saida invalido");
}
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!