Galera, me surgiu uma dúvida hoje e como não consegui encontrar um jeito 100% correto de se fazer vim até o Guj. Preciso encontrar o número de dias entre duas datas.
o meu código está parecido com um do Guj onde é subtraído o TimeInMillis() das datas. Para datas comuns deu certinho o meu código e os do Guj. Porém quando quero saber o intervalo 01/02/2008 a 01/03/2008 ele me retorna 31 dias, o que se formos contar não dá 31 dias. Até tem um código ai nos links onde diz ser considerado ano bissexto, mas nao deu certo. Nesse meu teste (01/02/2008 a 01/03/2008) alguém consegue obter o número de dias correto?? Vlw. !!!
Deve ser que aconteceu uma mudança de horário de verão entre essas duas datas. Em vez disso, veja se é possível usar o Joda-Time, porque tais coisas são bem chatinhas mesmo.
jzf
Cara eu fiz um algoritmo para um programa de agricultura em que o cara cadastra a nova aplicação de herbicidas e o sistema calcula automaticamente a data que o veneno é “vencido”. Não sei se é exatamente o que queres, mas acho que podes te ajudar.
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packageacoes;/** * Casse DataFinal: Responsável em definir a data de termino * @author jferreira */publicclassDataFinal{privateintdia;privateintmes;privateintano;privateintvetdias[]={31,28,31,30,31,30,31,31,30,31,30,31};privateintintervalo;privateintaux;privateintaux2;publicDataFinal(intdia,intmes,intano,intintervalo){this.dia=dia;this.mes=mes;this.ano=ano;this.intervalo=intervalo;this.aux=mes-1;}publicStringDefineData(){if(this.getAux()==1){if(this.isBissexto()){this.setAux2(29-this.getDia());}else{this.setAux2(29-this.getDia());}}else{this.setAux2(vetdias[aux]-this.getDia());}if(this.getAux2()>=this.getIntervalo()){this.setDia(this.getDia()+this.getIntervalo());}else{this.setIntervalo(this.getIntervalo()-this.getAux2());this.aux++;while(this.getIntervalo()>vetdias[aux]){if(this.aux==1){if(this.isBissexto()){this.setIntervalo(this.getIntervalo()-29);this.mes++;this.aux++;}else{this.setIntervalo(this.getIntervalo()-vetdias[aux]);this.mes++;this.aux++;}}else{this.setIntervalo(this.getIntervalo()-vetdias[aux]);this.aux++;this.mes++;if(this.getMes()>12){this.mes=1;this.ano++;}}if(this.getAux()==12){this.aux=0;}}if(this.getIntervalo()==0){this.setDia(1);}else{this.setDia(this.getIntervalo());}this.mes++;}returnthis.getDia()+"/"+this.getMes()+"/"+this.getAno();}publicintgetIntervalo(){returnthis.intervalo;}publicbooleanisBissexto(){if(this.getAno()%4==0&&this.getAno()%100!=0){returntrue;}else{returnfalse;}}privateintgetAno(){returnthis.ano;}publicintgetDia(){returndia;}publicvoidsetDia(intdia){this.dia=dia;}publicintgetMes(){returnmes;}publicvoidsetMes(intmes){this.mes=mes;}publicintgetAux(){returnaux;}publicvoidsetAux(intaux){this.aux=aux;}publicintgetAux2(){returnaux2;}publicvoidsetAux2(intaux2){this.aux2=aux2;}publicvoidsetAno(intano){this.ano=ano;}publicvoidsetIntervalo(intintervalo){this.intervalo=intervalo;}}
T
thingol
importjava.util.Date;importjava.util.Calendar;importjava.text.*;classDiferencaDatas{// Indica a diferença entre 2 datas, em dias. Não considera horas, minutos, segundos,// e tenta não levar em conta o malfadado horário de verão.// Retorna a diferença entre a data dt1 - a data dt2./** */publicstaticintdifDatas(Datedt1,Datedt2){Calendarcal1=Calendar.getInstance();Calendarcal2=Calendar.getInstance();cal1.setTime(dt1);cal2.setTime(dt2);cal1.set(Calendar.HOUR_OF_DAY,2);// 2 horas para evitar certos problemas com horário de verão...cal1.set(Calendar.MINUTE,0);cal1.set(Calendar.SECOND,0);cal1.set(Calendar.MILLISECOND,0);cal2.set(Calendar.HOUR_OF_DAY,1);// 1 hora para evitar certos problemas com horário de verão... cal2.set(Calendar.MINUTE,0);cal2.set(Calendar.SECOND,0);cal2.set(Calendar.MILLISECOND,0);return(int)((cal1.getTime().getTime()-cal2.getTime().getTime())/(1000L*60*60*24));}publicstaticvoidmain(String[]args)throwsParseException{DateFormatdf=newSimpleDateFormat("dd/MM/yyyy");// 2008 é bissexto, deve ter 29 diasSystem.out.println(difDatas(df.parse("01/03/2008"),df.parse("01/02/2008")));// O horário de verão 2008 vai começar em 19/10System.out.println(difDatas(df.parse("31/10/2008"),df.parse("01/10/2008")));// A mesma coisa aqui (o horário de verão 2009 vai terminar em 15/02)System.out.println(difDatas(df.parse("28/02/2009"),df.parse("01/02/2009")));// Sem horário de verãoSystem.out.println(difDatas(df.parse("31/07/2008"),df.parse("01/07/2008")));}}
renzonuccitelli
Já tentou usar o método add da API Calendar? Fiz um teste pra responder um tópico, com data iniciando em um ano e terminando em outro, e ele imprimiu direitinho. Dá uma olhada e vê se te ajuda: http://www.guj.com.br/posts/list/103611.java