Acertar Diferenca entre Datas!

2 respostas
sudeval

Ae galera estou com o seguinte problema.

Como que consigo acertar essa diferenca entre Data.

tipo:
Se eu fizer…

Calendar dBase = new GregorianCalendar(2000,06,03);
Calendar venc = new GregorianCalendar(2001,11,31);
		
Integer dias = diferencaEntreDate(venc.getTime(),dBase.getTime());
int base = 1000 + dias.intValue();
System.out.println("Dias: "+resultado);
Resposta: 1545

diferencaEntreDate(Date x, Date y)

public static Integer diferencaEntreDate(Date data1, Date data2) {
     Locale locale = new Locale("pt_BR");
     TimeZone zona = TimeZone.getTimeZone("GMT-3");
     Calendar d1 = Calendar.getInstance(zona,locale);
     Calendar d2 = Calendar.getInstance(zona,locale);

     d1.setTime(data1);
     d2.setTime(data2);
     int dia = (int) ((d1.getTimeInMillis() - d2.getTimeInMillis())/(24*60*60*1000));
		return new Integer(dia);

[color=red]Mais se eu fizer !!![/color]
main

Calendar dBase = new GregorianCalendar(2000,06,03);
Calendar venc = new GregorianCalendar(2001,11,31);
		
Integer dias = diferencaEntreCalendar(venc,dBase);
int resultado = dias.intValue() + 1000;
System.out.println("Dias: "+resultado);


Resultado da 1546  ( que segundo a documentacao de algo que to fazendo aqui é o correto! )

[/b] diferencaEntreCalendar(Calendar x, Calendar y)

public static Integer diferencaEntreCalendar(Calendar calendar1, Calendar calendar2) {
   TimeZone zona = TimeZone.getTimeZone("GMT-3");
   Locale locale = new Locale("pt_BR");

   calendar1.setTimeZone(zona);
   calendar2.setTimeZone(zona);
		 
   int dia = (int) ((calendar1.getTimeInMillis() - calendar2.getTimeInMillis())/(24*60*60*1000));
 return new Integer(dia);
}

O que posso fazer para que eu mande tanto Date como Calendar e ele me der um resultado consistente.

pelo que eu vi ele se altera depois que eu faco um Calendar.siteTime(Date).

2 Respostas

T
  1. Uma coisa muito chata quando temos de fazer uma diferença entre duas datas é que você pode ter um horário de verão no meio. Isso faz com que duas datas (onde hora, minuto, segundo são 00:00:00) fiquem com diferença de (por exemplo) 12 dias e 1 hora, ou então 12 dias menos 1 hora.

Na hora que você faz essa conta (dividir por 246060*1000L) pode dar um dia a menos, porque pode ocorrer o caso “12 dias menos 1 hora”, que vai dar 11 dias na sua divisão.

Para fazer o cálculo, então some 1 hora ao resultado da subtração - você vai ter algo como 12 dias e 2 horas, ou 12 dias menos 1 hora mais 1 hora = 12 dias. Então vai dar 12 dias na sua divisão.

  1. Quando você tem dois “Date” o caso é pior ainda, porque você pode ter algo como “03/06/2000 23:59:59” e “31/11/2001 00:00”. Você precisaria fazer algo como:
  • Atribuir esse Date a um Calendar;
  • Zerar a parte de horas, minutos e segundos;
  • Fazer a subtração de Calendar como mostrado acima.
sudeval

vlw thingol, saquei ae!

Criado 19 de maio de 2006
Ultima resposta 19 de mai. de 2006
Respostas 2
Participantes 2