Boa noite, estou fazendo uma aplicação desktop sobre controle de frequência de funcionários. Estou finalizando o cálculo de horas.
O que eu JÁ tenho funcionando é calcular quantas horas o funcionário fez e quantas horas extras ele fez.
O que eu queria saber é quantas horas extras NOTURNAS ele fez, ou quantas horas noturnas ele trabalhou (pois ganha mais entre as 21 e 5:00 da manhã).
Exemplo: Um funcionário entrou as 18:00 e saiu as 7:00 do outro dia, como posso saber quantas horas noturnas ele fez?
Exemplo 2: Um funcionário entra as 10:00 e sai as 20:00 e nesse dia acabou saindo 23, como saber quantas horas ele trabalhou após as 21:00?
Se conseguirem responder o primeiro exemplo acredito que o segundo aplicaria a mesma regra, Por favor se souberem de alguma forma agradeço.
vc tem 2 informacoes: tempo de entrada e tempo de saida, certo?
logo sao as variaveis entrada e saida.
vc tem agora o comeco e fim do horario noturno.
se suas variaveis sao hora mais data, isso significa q se eu entro hoje as 18 e saio amanha as 7, o horario de saida tem um dia a mais relativo ao dia de hoje.
se vc tem os objetos java.util.Date perfeitamente calculados levando em conta o dia +1, assim como o comeco e fim do horario noturno, entao vc faz
overlap = max(0, min(EndDate1, EndDate2) - max(StartDate1, StartDate2))
O cálculo que eu tenho está da seguinte maneira: Eu uso o comando Duration.between para descobri quantos segundos de diferença tem entra o tempo de entrada e de saida, com isso tenho quantas horas ele trabalhou. Comparo com quantas horas o funcionário necessita trabalhar e assim tenho quantas horas extra ele fez.
Eu não entendi muito bem o que você explicou, o que seria esse EndDate 1 e 2 e StartDate 1 e 2.
Se puder me explicar o que essa linha faz eu agradeço, gostaria de entender o que estou fazendo.
vc quer saber o overlap de 2 datas
1 eh o seu intervalo de tempo que representa as horas noturnas
2 eh o intervalo trabalhado
start é o começo, end é o fim
Poderia me explicar a sintase por favor:
No meu caso EndDate 1 = 5:00 e StartDate1 = 21:00
EndDate 2 = Horário de saida e StartDate2 = Horário de entrada
Mas o que é esse overlap, o max, 0, e min. Quais suas utilidades dentro dessa linha de comando?
overlap = max(0, min(EndDate1, EndDate2) - max(StartDate1, StartDate2))
Vamos la
max seria o maior horario
min seria o menor horario
Lembre-se q 5 AM do dia seguinte é no dia seguinte
Se usar este algoritmo vc vai descobrir
Valeu por tentar ajudar, mas é que eu não entendi esse algorítimo e não funcionou.