Isso é problema do horário de verão, que muda mais ou menos em outubro.
O que ocorre é que de 01/10/2006 00:00:00 a 10/10/2006 00:00:00 deve haver apenas 6 dias e 23 horas, em vez de 7 dias.
Uma dica é a seguinte: para evitar esses problemas, faça as contas com 01/10/2006 00:00:00 a 10/10/2006 01:00:00 (adicione sempre uma hora no dia final).
Dessa maneira, vai haver 7 dias.
Mesmo que você não tenha a transição do horário de verão (por exemplo, em junho não há horário de verão), você vai ter algo como 7 dias e uma hora, que pode ser desprezada.
[quote=thingol]Isso é problema do horário de verão, que muda mais ou menos em outubro.
O que ocorre é que de 01/10/2006 00:00:00 a 10/10/2006 00:00:00 deve haver apenas 6 dias e 23 horas, em vez de 7 dias.
[/quote]
Aham, falha nossa - é óbvio que a resposta certa é 9 (10 - 1), não 7. Quem está pensando em octal aqui?
[quote=thingol][quote=thingol]Isso é problema do horário de verão, que muda mais ou menos em outubro.
O que ocorre é que de 01/10/2006 00:00:00 a 10/10/2006 00:00:00 deve haver apenas 6 dias e 23 horas, em vez de 7 dias.
[/quote]
Aham, falha nossa - é óbvio que a resposta certa é 9 (10 - 1), não 7. Quem está pensando em octal aqui? [/quote]
Desculpe mas a confusão persiste. A resposta certa seria 10 se não fossem excluídos os sábados e domingos. Mas a estrutura condicional do código citado faz essa exclusão. Assim, a resposta certa evidentemente é 7.
BRST é Brazil Summer Time enquanto BRT é Brazil Time. Eles não ficarão iguais. O dia 1 eh horário normal, o dia 10 é horário de verão. Assim, a solução seria que vc adicionasse uma hora sempre ao horário final, como já foi dito. O que está acontecendo é que vc está passando um intervalo de 6 dias e 23 horas, e não 7 dias. Lembre-se do horário de verão.
adicionei a seguinte linha “calfim.add(Calendar.HOUR , 1);”
MAIS NÃO FUNCIONA…não aguento mais isso EHhuehuEHEHHUE
quanto aos feriados, eu tenho uma tabela de feriados que usuario cadastra conf. sua regiao, e dou um select between nela. Foi a unica solução eheheheh
public class Funcoes{
public static int DiasUteis(Date dataini, Date datafim){
int dias=0;
Calendar calini = new GregorianCalendar();
Calendar calfim = new GregorianCalendar();
calini.setTime(dataini);
calfim.setTime(datafim);
calfim.add(Calendar.HOUR , 1);
while(calini.before(calfim) || calini.equals(calfim)){
if ((calini.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) && (calini.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY)){
dias+= 1; //dias+= -1;
}
calini.add(Calendar.DAY_OF_MONTH , 1);
}
return dias;
}
adicionei a seguinte linha “calfim.add(Calendar.HOUR , 1);”
MAIS NÃO FUNCIONA…não aguento mais isso EHhuehuEHEHHUE
quanto aos feriados, eu tenho uma tabela de feriados que usuario cadastra conf. sua regiao, e dou um select between nela. Foi a unica solução eheheheh[/quote]
O que quer dizer não funciona? Continua retornando 6 dias? Tente adicionar mais de uma hora.
GALERA FUNCIONOU!!!
tive que fazer isso…eu só não entendi o pq mais funcionou
VLWSSSSSSSSS…SE ALGUEm puder explica ai pq assim funcionou
ABRAÇOSSSSSSS[/quote]
Tenta colocar apenas uma hora no calendário inicial? Funciona? Se funcionar o fato é que akela uma hora acrescida no calendário final não faz diferença. Afinal o dia 10/10/2006 00:00:00 + uma hora resulta em: 10/10/2006 01:00:00. Isto é um acréscimo num dia que já eh horário de verão, logo, nao faria diferença;
Porém a hora acrescida ao dia 1/10/2006 00:00:00 resulta em: 1/10/2006 01:00:00 que será assim até o decréscimo de uma hora que ocorre neste intervalo. Este acrescimo de uma hora anula o decréscimo de uma hora do harário de verão, que começa algum dia deste intervalo. Esta hora portanto resultará em um intervalo de 7 dias e 0 horas, e não mais de 6 dias e 23 horas. Compreende?