Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Resolução

/**
 * Você é responsável pelo controle de tempo em projetos dentro de uma agência de desenvolvimento.
 * Você precisa monitorar o tempo gasto em cada tarefa para garantir que os projetos
 * sejam executados dentro do prazo.
 *
 * Para isso, crie um programa que:
 *
 * Receba dois horários representando o início e o término de uma atividade.
 * Calcule a diferença em horas e minutos entre esses dois horários.
 * Exiba o resultado formatado.
 */

package com.github.lucasdevrj.exercicios;

import java.time.LocalTime;
import java.util.Scanner;

public class DiferencaEntreHorarios {
    public static void main(String[] args) {
        LocalTime horarioDeInicio;
        LocalTime horarioDeFim;
        LocalTime diferencaEntreHorarios;

        Scanner entrada = new Scanner(System.in);

        System.out.print("Digite as horas do início da atividade: ");
        int horasInicio = entrada.nextInt();

        while (horasInicio < 0 || horasInicio >= 24) {
            System.out.println("Digite uma hora válida!");
            System.out.print("Digite as horas do início da atividade: ");
            horasInicio = entrada.nextInt();
        }

        System.out.print("Digite os minutos do início da atividade: ");
        int minutosInicio = entrada.nextInt();

        while (minutosInicio < 0 || minutosInicio >= 60) {
            System.out.println("Digite uma minutagem válida!");
            System.out.print("Digite os minutos do início da atividade: ");
            minutosInicio = entrada.nextInt();
        }

        horarioDeInicio = LocalTime.of(horasInicio, minutosInicio);

        System.out.print("Digite as horas do fim da atividade: ");
        int horasFim = entrada.nextInt();

        while (horasFim < 0 || horasFim >= 24) {
            System.out.println("Digite uma hora válida!");
            System.out.print("Digite as horas do fim da atividade: ");
            horasFim = entrada.nextInt();
        }

        System.out.print("Digite os minutos do fim da atividade: ");
        int minutosFim = entrada.nextInt();

        while (minutosFim < 0 || minutosFim >= 24) {
            System.out.println("Digite uma hora válida!");
            System.out.print("Digite os minutos do fim da atividade: ");
            minutosFim = entrada.nextInt();
        }

        horarioDeFim = LocalTime.of(horasFim, minutosFim);

        while (horarioDeFim.isBefore(horarioDeInicio) || horarioDeFim.equals(horarioDeInicio)) {
            System.out.println("Digite horário válidos!");
            System.out.print("Digite as horas do fim da atividade: ");
            horasFim = entrada.nextInt();

            System.out.print("Digite os minutos do fim da atividade: ");
            minutosFim = entrada.nextInt();

            horarioDeFim = LocalTime.of(horasFim, minutosFim);
        }
        entrada.close();

        LocalTime diferencaDeHoras = horarioDeFim.minusHours(horarioDeInicio.getHour());
        LocalTime diferencaDeMinutos = horarioDeFim.minusMinutes(horarioDeInicio.getMinute());
        diferencaEntreHorarios = LocalTime.of(diferencaDeHoras.getHour(), diferencaDeMinutos.getMinute());

        System.out.printf("Diferença de tempo: %d horas e %d minutos", diferencaEntreHorarios.getHour(), diferencaEntreHorarios.getMinute());
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Beleza?

1 resposta
solução!

Olá, Lucas! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o LocalTime para manipulação de horários com Java, utilizou muito bem a validação de entrada para garantir consistência e ainda compreendeu a importância da diferença de tempo para monitorar tarefas em projetos.

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

Uma dica interessante para o futuro é trabalhar com Duration para calcular diferenças de tempo de forma mais precisa:

Duration duracao = Duration.between(horarioDeInicio, horarioDeFim);
System.out.printf("Diferença de tempo: %d horas e %d minutos", duracao.toHours(), duracao.toMinutesPart());

Isso faz o cálculo direto da duração entre dois horários.

Ah, uma pergunta: Você considera mais eficiente calcular diferenças de tempo com Duration para maior precisão ou manter o controle com LocalTime para simplicidade e clareza?

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!