1
resposta

Exercício 03

import java.time.Duration;
import java.time.LocalTime;

public class Exercicios {
    public static void main(String[] args) {
        LocalTime inicio = LocalTime.of(14,30);
        LocalTime fim = LocalTime.of(16,45);

        Duration duracao = Duration.between(inicio, fim);
        System.out.println("Diferença de tempo: " + duracao.toHoursPart() + " horas e " +
                duracao.toMinutesPart() + " minutos");
    }
}
1 resposta

Olá, Bernardo. Como vai?

Parabéns por mais uma resolução excelente! O seu código para o Exercício 3 ficou impecável e a lógica está 100% correta.

A escolha da classe LocalTime para armazenar apenas o horário (sem data) e da classe Duration para calcular o intervalo foi cirúrgica. Além disso, você utilizou uma das melhores atualizações da API java.time (introduzida a partir do Java 9): os métodos .toHoursPart() e .toMinutesPart().

Por que o seu código seguiu a melhor prática?

Antigamente, quando usávamos o método .toMinutes(), o Java devolvia o tempo total convertido em minutos (neste caso, $135$ minutos). Para exibir o formato amigável de horas e minutos na tela, o desenvolvedor era obrigado a fazer cálculos matemáticos manuais de divisão e resto por 60.

Os novos métodos que você utilizou funcionam extraindo apenas a fração restante de cada unidade de tempo, isolando as horas dos minutos de forma limpa e direta.

Para visualizar como o Java interpretou o seu comando nos bastidores, o cálculo da duração funciona exatamente como uma linha do tempo segmentada:

O método Duration.between(inicio, fim) calculou o intervalo total absoluto. Quando você chamou os métodos de extração de partes (Part), o Java preencheu as suas mensagens com os valores fracionados corretos ($2$ horas e $15$ minutos) em vez de acumular tudo em uma única unidade.

Uma sugestão de ouro: Tratando durações negativas

O seu código funciona perfeitamente porque a variável fim (16:45) está cronologicamente à frente da variável inicio (14:30).

Em sistemas de finanças ou ponto eletrônico, pode acontecer de o usuário digitar os horários invertidos por erro, ou o sistema receber um horário de término menor que o de início. Se você inverter os valores no método atual (Duration.between(fim, inicio)), o Java gerará uma duração negativa, imprimindo na tela: Diferença de tempo: -2 horas e -15 minutos.

Como boa prática para tornar o seu código ainda mais robusto e à prova de falhas, você pode utilizar o método .abs() da própria classe Duration. Ele ignora se o resultado foi positivo ou negativo e devolve sempre o valor absoluto (o tempo real corrido).

Veja como aplicar esse detalhe de segurança no seu script:

LocalTime inicio = LocalTime.of(14, 30);
LocalTime fim = LocalTime.of(16, 45);

// O método .abs() garante que o resultado nunca exiba sinais de menos (-) na tela
Duration duracao = Duration.between(inicio, fim).abs();

System.out.println("Diferença de tempo: " + duracao.toHoursPart() + " horas e " +
        duracao.toMinutesPart() + " minutos");

Você está com um ritmo excelente e demonstrando total domínio sobre a manipulação dos novos recursos de tempo do Java. Parabéns e continue focado!

Espero que possa ter lhe ajudado!