Faço vários cálculos de datas considerando as 24h do dia.
Porém em alguns casos eu preciso considerar apenas o horário comercial.
Por exemplo:
Eu vou calcular quantas horas tem entre 01/01/2014 às 17:00h até 02/02/2014 às 09:00h.
Vou ter um retorno de 16h, mas não é isso que eu quero, quero que ele considere apenas das 08h às 18h, retornando apenas 2h.
Isto também precisa funcionar para soma, se eu quiser somar 2h a data 01/01/2014 às 17:00h teria que retornar 02/02/2014 às 09:00h.
Alguém conhece alguma forma de fazer isso utilizando o joda-time?
Existe alguma forma de definir um intervalo de horário para o joda-time considerar apenas aquele intervalo?
Se tiver uma solução que não utilize joda-time favor compartilhar também.
(Já pesquisei bastante e não encontrei nada a respeito)
Resolvi a questão temporariamente.
Ao meu ver foi uma grande “gambiarra” mas por enquanto vou usá-la.
É uma procedure que pega a data final e inicial e calcula em minutos a diferença considerando apenas o horário comercial (08~18 de seg. a sex. no meu caso)
[code]create or replace procedure calcula_hora as
wk_minutos number;
wk_mintotal number := 0;
wk_data_aux date;
wk_aux number := 1;
begin
select (datafim-dataini)2460 into wk_minutos from teste;
select dataini into wk_data_aux from teste;
while (wk_aux <= wk_minutos) loop
if (to_char(wk_data_aux,‘HH24’) between 08 and 17) and (to_char(wk_data_aux, ‘DY’) in (‘SEG’,‘TER’,‘QUA’,‘QUI’,‘SEX’))then
wk_mintotal := wk_mintotal+1;
end if;
wk_aux := wk_aux+1;
wk_data_aux := wk_data_aux+1/1440;
end loop;
dbms_output.put_line(wk_mintotal);
end;[/code]
Não foi exatamente isso que usei, adaptei pra ficar melhor explicado aqui, nesse caso coloquei um dbms_output só pra ilustrar.
Estou criando algo mais bonito em java mesmo pra fazer o mesmo trabalho, se eu conseguir eu posto aqui.