Comparando datas e pegando a diferença em dias

6 respostas
R

E ae comunidade

Alguem sabe como compara datas! por favor... estou tendo problemas... cheguei até aqui !
Calendar calendar = GregorianCalendar.getInstance(TimeZone.getTimeZone(GMT-03:00), new Locale(pr,BR));

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dd/mm/yyyy);

calendar.setTime(simpleDateFormat.parse(01/01/2005));

eu preciso pegar a diferença em dia de duas datas ! por exemplo

01/01/2005 - 02/01/2005 = 1 dia
01/01/2005 - 03/01/2005 = 2 dia

6 Respostas

B

//criando uma interface Calendar, instanciando com GregorianCalendar
Calendar calendar = new GregorianCalendar();

//setando a data (axo que eh setTime msm…)
calendar.setTime(2005,03,02);

//pegando o numero do dia no ano (10 de janeiro = 10)

int dia1 = cal.get(Calendar.DAY_OF_YEAR);

calendar.setTime(2005,03,03);

int dia2 = cal.get(Calendar.DAY_OF_YEAR);

dia2-dia1 >> 1!

acho que isso vai resolver… mas só para datas no mesmo ano!!!
se os anos forem diverente, você pode fazer por etapas, tipo:

20/dez/2004 >> 10/jan/2005

faz de 20/dez ate dia 31/dez, e de 1/jan ate 10/jan

[]`s

R

Ohhh cara… valeu… acho que deu certo… so estou meio encudo com ano
bisesto… Da uma olha e ve se vale fazer dessa forma !

private Locale locale;

private TimeZone timeZone;

protected final String DATABASE = 07/10/1997; //data base para calculo do fator de vencimento

protected int calculaFatorVencimento(String argDataVencimento){

String dataInicial[] = DATABASE.split("/");

String dataVencimento[] = argDataVencimento.split("/");
int anoVenc = Integer.parseInt(dataVencimento[2]);
	int anoIni  = Integer.parseInt(dataInicial[2]);
	
	Calendar calendar = GregorianCalendar.getInstance(timeZone,locale);
	calendar.set(anoIni,
				 Integer.parseInt(dataInicial[1]),
				 Integer.parseInt(dataInicial[0]));
	int diaInicial = calendar.get(Calendar.DAY_OF_YEAR);
	
	calendar.set(anoVenc,
				 Integer.parseInt(dataVencimento[1]),
				 Integer.parseInt(dataVencimento[0])); 
	int diaVencimento = calendar.get(Calendar.DAY_OF_YEAR);
	
	return (diaVencimento - diaInicial) + ((anoVenc - anoIni) * 365);
	
}

public static void main(String args[]){
  System.out.println(new Teste().calculaFatorVencimento("05/07/2000"));
}
R

Ohhh comunidade… tudo beleza.
Andei tendo problemas com datas… realmente é meio complicado trabalhar com datas em java ! Acho que consegui resolver o problema com a ajuda de vcs… mas será que realmente precisa fazer tudo isso ?
Por favor… olhem o codigo abaixo e me dizem oque vcs acham.

public class Time {

private final String DATABASE = "07/10/1997"; //data base para calculo do fator de vencimento
private final TimeZone timeZone = TimeZone.getTimeZone("America/Los_Angeles");
private final Locale locale = new Locale("pr","BR");

/**
 * Um ano é bissexto se for divisivel por 4 mas nao divisivel por 100,
 * exceto pelos anos divisiveis por 400, que sao bissextos.
 * @param argDataInicial
 * @param argDataFinal
 */
private final int isAnoBissexto(int ano){
	if ((ano%4==0 && ano%100 !=0) || ano%400==0)
		return 1;
	return 0;
}

 
protected int calculaFatorVencimento(String argDataVencimento){ 
String dataInicial[] = DATABASE.split("/"); 
String dataVencimento[] = argDataVencimento.split("/"); 

int anoVenc = Integer.parseInt(dataVencimento[2]); 
int anoIni = Integer.parseInt(dataInicial[2]); 

Calendar calendar = GregorianCalendar.getInstance(timeZone,locale); 
calendar.set(anoIni, 
Integer.parseInt(dataInicial[1]), 
Integer.parseInt(dataInicial[0])); 
int diaInicial = calendar.get(Calendar.DAY_OF_YEAR); 

calendar.set(anoVenc, 
Integer.parseInt(dataVencimento[1]), 
Integer.parseInt(dataVencimento[0])); 
int diaVencimento = calendar.get(Calendar.DAY_OF_YEAR);

int anoBissexto = 0;
while( anoIni < anoVenc)
	anoBissexto+=isAnoBissexto(anoIni++);

return (diaVencimento - diaInicial) + ((anoVenc - anoIni) * 365) + anoBissexto; 

} 

public static void main(String args[]){ 
	System.out.println(new Time().calculaFatorVencimento("05/07/2000")); 
}

}

M

como faco para comparar duas datas ???

a inicial vou digitar num textfield e a final em outro textfield ???

I

Aqui

T+

M

ok

obrigado

Criado 2 de março de 2005
Ultima resposta 21 de dez. de 2006
Respostas 6
Participantes 4