Embora o campo "Opinião do instrutor" nos entrega a solução, decidi fazer da minha forma:
public class TesteGeral {
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
DateTimeFormatter formato = DateTimeFormatter.ofPattern("HH:mm");
System.out.println("Digite o horário de entrada (HH:mm): ");
LocalTime entrada = LocalTime.parse(leitura.next(), formato);
System.out.println("Digite a carga horária (em horas): ");
int cargaHoraria = leitura.nextInt();
System.out.println("Digite o horário de sáida (HH:mm): ");
LocalTime saida = LocalTime.parse(leitura.next(), formato);
Duration cargaHorariaReal = Duration.between(entrada, saida);
LocalTime horarioEntradaPrevisto = LocalTime.of(8, 0);
LocalTime horarioSaidaPrevisto = entrada.plusHours(cargaHoraria);
Duration diaria = Duration.between(horarioEntradaPrevisto, horarioSaidaPrevisto);
System.out.println("Horário de entrada previsto: " + horarioEntradaPrevisto.format(formato));
System.out.println("Carga horária prevista: "+ diaria.toHours());
System.out.println("Horário de saída previsto: " + horarioSaidaPrevisto.format(formato) +
"\n########################################################");
Duration bancoDeHoras = cargaHorariaReal.minus(diaria);
System.out.println("Hora de entrada registrada: " + entrada.format(formato));
System.out.println("Horas trabalhadas no dia: " + cargaHorariaReal.toHours());
System.out.println("Hora de saída registrada: " +saida.format(formato));
System.out.println("Saldo de banco de horas: " + bancoDeHoras.toHours() + "h" + bancoDeHoras.toMinutesPart() + "min");
}
}
A única coisa que não consegui solucionar da minha forma, foi a amostragem do banco de horas que acaba colocando o sinal - tanto na horas, quanto nos minutos. Acredito que essa parte o Front-end consiga tratar. =P