Olá!
Segue minha resolução:
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 horaFormatada = DateTimeFormatter.ofPattern("HH:mm");
System.out.println("Digite horário de entrada: ");
LocalTime horaEntrada = LocalTime.parse(sc.next(), horaFormatada);
Long cargaHoraria = null;
while (true) {
try {
System.out.println("Digite a carga horária de trabalho: ");
cargaHoraria = sc.nextLong();
break;
} catch (InputMismatchException e) {
System.out.println("Informe um número válido para a carga horária.");
sc.nextLine();
}
}
System.out.println("Digite o horário de saída");
LocalTime horaSaida = LocalTime.parse(sc.next(),horaFormatada);
Duration expediente = Duration.between(horaEntrada, horaSaida);
Duration expedienteLiquido = expediente.minusHours(1);
Long horaLiquida = expedienteLiquido.toHours();
double saldoHoras = horaLiquida - cargaHoraria;
Long horas = (long) saldoHoras;
long minutos = Math.round((saldoHoras-horas)*60);
String formatado = String.format("%02d:%02d", horas, minutos);
System.out.println("Horário de entrada: " + horaEntrada);
System.out.println("Carga horária trabalhada: " + cargaHoraria);
System.out.println("Horário de saída: " + horaSaida);
System.out.println("Saldo de horas: " + formatado);
sc.close();
}
}