Lógica Java para controle de Horas

Boa tarde a todos,

Preciso de ajuda para criar um programa que faz um controle de horas trabalhadas em uma empresa.
Até o presente momento eu estava indo muito bem, até que no momento dos testes, encontrei um pequeno bug. O programa consiste em: O usuário entra com os dados da hora em que ele bateu seus pontos (Início de turno, saída para intervalo, fim do intervalo e fim do Turno) e o programa executa os cálculos para identificar quantas horas o funcionário trabalhou aquele dia. Durante os cálculos converto as horas em minutos e subtraindo o fim pelo início, obtenho os resultados em minutos que converto em horas posteriormente quando vou exibir o resultado em um jFrame.
O problema surgiu quando eu coloco um horário que passe de um dia para outro (que passe pelas 00:00h). Por exemplo:

Início de turno = 18:00
Saída para intervalo = 22:20
Fim do intervalo = 23:40
Fim do turno = 02:40

Ele retorna um valor que não faz sentido. Como fica a lógica para uma condição caso durante o turno de trabalho mude a hora de 23:59 para 00:00?
Desde já agradeço a compreensão de todos.

Não precisa reinventar a roda, existem APIs de Date/Time para fazer essas contas para você. Se estiver utilizando Java 8, olhe a nova API dentro de java.time, tem um tutorial da Oracle aqui: http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html

Se estiver em versões anteriores do Java, use a API antiga de Date/Time ou utilize alguma biblioteca como Joda-Time: http://www.joda.org/joda-time/

A ideia é que você construa objetos de DateTime com os dados informados pelo usuário e utilize a API para calcular as diferenças de tempo, sem precisar fazer absolutamente nenhuma conta manualmente.

Dá uma olhada e se tiver alguma dúvida de como usar, pergunta aí que a gente se ajuda!

Muito obrigado, ajudou bastante sim. Mas ainda queria ver como funciona a lógica para efetuar esse cálculo de quando muda o horário de 23:59hs para 00:00hs durante o horário de serviço do funcionário. Você saberia explicar? Mostrar um pequeno código de como funciona? Depois eu declaro esse tópico como resolvido.
Novamente, obrigado pela ajuda.

import java.time.*;
import java.time.temporal.*;

class Main {

    public static void main(String... args) {
        LocalDate hoje = LocalDate.now();
        LocalDate amanha = hoje.plusDays(1);

        LocalTime agora = LocalTime.now();
        LocalTime umaHoraDaManha = LocalTime.of(1, 0);

        LocalDateTime hojeAgora = LocalDateTime.of(hoje, agora);
        LocalDateTime amanhaUmaDaManha = LocalDateTime.of(amanha, umaHoraDaManha);

        System.out.println("Segundos de agora até 1:00 de amanhã: " + hojeAgora.until(amanhaUmaDaManha, ChronoUnit.SECONDS));
        System.out.println("Minutos de agora até 1:00 de amanhã: " + hojeAgora.until(amanhaUmaDaManha, ChronoUnit.MINUTES));
        System.out.println("Horas de agora até 1:00 de amanhã: " + hojeAgora.until(amanhaUmaDaManha, ChronoUnit.HOURS));
        System.out.println("Dias de agora até 1:00 de amanhã: " + hojeAgora.until(amanhaUmaDaManha, ChronoUnit.DAYS));
        System.out.println("Mêses de agora até 1:00 de amanhã: " + hojeAgora.until(amanhaUmaDaManha, ChronoUnit.MONTHS));
        System.out.println("Anos de agora até 1:00 de amanhã: " + hojeAgora.until(amanhaUmaDaManha, ChronoUnit.YEARS));
    }

}

Como que fecha o tópico? Meu problema já foi resolvido.