Preciso calcular a diferença entre 2 datas em dias… porém é preciso considerar os meses que temos 28,30 ou 31 dias e os anos bissesto. Eu recupero do banco as duas datas como String e as transformo para int para fazer o calculo, mas acredito que já se tenha algo pronto em relação a essa minha situação e que não seria preciso eu reinventar a roda… alguem poderia me ajudar nesse meu caso?
Esta é uma classe que achei no Google para fazer isso:
importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;publicclassDateDiff{// set some constants that allow pretty accurate estimates over// about 2,000 years before or after the present. These are// slight overestimates since that's what we want (and need!)privatestaticfinaldoubleDAY_MILLIS=1000*60*60*24.0015;privatestaticfinaldoubleWEEK_MILLIS=DAY_MILLIS*7;privatestaticfinaldoubleMONTH_MILLIS=DAY_MILLIS*30.43675;privatestaticfinaldoubleYEAR_MILLIS=WEEK_MILLIS*52.2;publicstaticintgetDateDiff(intcalUnit,Dated1,Dated2){// swap if d1 later than d2booleanneg=false;if(d1.after(d2)){Datetemp=d1;d1=d2;d2=temp;neg=true;}// estimate the diff. d1 is now guaranteed <= d2intestimate=(int)getEstDiff(calUnit,d1,d2);// convert the Dates to GregorianCalendarsGregorianCalendarc1=newGregorianCalendar();c1.setTime(d1);GregorianCalendarc2=newGregorianCalendar();c2.setTime(d2);// add 2 units less than the estimate to 1st date,// then serially add units till we exceed 2nd datec1.add(calUnit,(int)estimate-2);for(inti=estimate-1;;i++){c1.add(calUnit,1);if(c1.after(c2))returnneg?1-i:i-1;}}privatestaticintgetEstDiff(intcalUnit,Dated1,Dated2){longdiff=d2.getTime()-d1.getTime();switch(calUnit){caseCalendar.DAY_OF_WEEK_IN_MONTH:caseCalendar.DAY_OF_MONTH:// case Calendar.DATE : // codes to same int as DAY_OF_MONTHreturn(int)(diff/DAY_MILLIS+.5);caseCalendar.WEEK_OF_YEAR:return(int)(diff/WEEK_MILLIS+.5);caseCalendar.MONTH:return(int)(diff/MONTH_MILLIS+.5);caseCalendar.YEAR:return(int)(diff/YEAR_MILLIS+.5);default:return0;}/* endswitch */}}
mister_m
Melhor usar mesmo o Joda-Time ou você poderá encontrar problemas bem feios quando as datas contiverem um número ímpar de mudanças relativas ao horário de verão.