Verificação de hora em um intervalo de datas

Bom dia,

Então, fiz uma pesquisa bem grande e não encontrei nada igual ao meu problema, somente parecido, porém que não me resolve. Vamos ao problema:

Minha estrutura:
Linguagem: Java
Banco: Oracle

Problema:
1º - em meu sistema tenho um cadastro de turnos.
Ex.: Turno 1 | 01/01/1900 05:00:00 | 01/01/1900 14:48:00
Turno 2 | 01/01/1900 14:48:00 | 01/01/1900 22:00:00
Turno 3 | 01/01/1900 22:00:00 | 02/01/1900 05:00:00

2º - em minha lógica, obtenho a data e hora atual utilizando LocaDateTime.now(), então utilizando o .toLocaTime() obtenho a hora, exemplo: 01:30:00, quero descobrir, em que turno essa hora pertence.

Testes já realizados: quando os turnos são do mesmo dia estes consigo obter o turno, o único que eu não consigo é quando o horário é entre 00:00:00 até às 05:00:00 (horário fim do Turno 3)

Grato da colaboração!

E está certo, não vai conseguir.
Afinal, o dia possui 24 horas (tecnicamente, 23:56, mas isso não vem ao caso), partindo de 00:00:00:000000 e indo até 23:59:59:999999. O que passou disso, é outro dia.

Ah, mas então não tem como fazer?
Tem sim. Cada turno possui um range de horas, exemplo:
1 - 06:00 - 14:00
2 - 14:00 - 22:00
3 - 22:00 - 06:00

“Sim, isso eu sei. E daí?”
Daí que o terceiro turno é dividido em dois:
3 - 22:00 - 23:59 e 00:00 - 06:00

Opa, aí já muda.
Sim, sempre que for buscar um horário maior ou igual ao início do turno da noite ou menor que o início do turno da manhã, você precisa buscar nos dois intervalos.

1 curtida

Obrigado @darlan_machado

Então, já havia pensado nisso.
O único problema que eu tenho nesse caso, é que se uma tarefa inicia às 23:00 e finaliza às 02:00, ela estará em dois turnos diferentes.
Assim teria que quebrar a tarefa em duas partes:
uma iniciando às 23:00 e finalizando às 23:59
e repetir ela iniciando às 00:00 e finalizando às 02:00.

É uma solução, vamos estudar a estrutura do sistema para isso.

Na verdade, não.
Eu não sei se você vai fazer essa consulta direto para um relatório, mas, de qualquer maneira, você consegue manipular até o ponto de deixar apenas os três turnos.