Funcao para contar dias entre duas datas

Exemplo, eu tenho a data 01/01/2006 e a data 10/08/2007

Como calcular a quantidade de dias entre elas, incluindo o dia inicial e o dia final.

Eu dei uma procurada aqui no guj, mas nao ficou muito claro, pois o meu caso eh mais especifico.

Ps, as datas devem ser java.util.Date

Obrigado a todos.

[]s

bom, ja tive esse problema e a minha solução maluca foi transformar as duas datas em timestamp e diminuir da maior a menor. depois disso dividir a quantidade de segundos por 86400. Usei isso quando estava trabalhando no php, mas acredito que tem um modo melhor de conseguir esse resultado no Java.

da uma olhada nessa api de datas …

http://joda-time.sourceforge.net/

Dah uma olhada neste exemplo que eu fiz:

	Date data1 = new Date(), data2 = new Date();

	data1.setTime(System.currentTimeMillis());
	data2.setTime(System.currentTimeMillis());

	System.out.println(data2.getTime() - data1.getTime());

Se tivesse como eu definir a data1 e a data2, passando uma string, tipo “19800101” ou “01/01/1980” ou em qq outro formato, me resolveria, pois ai, para calcular o numero de dia, eh soh dividir a dif. entre elas…

ummm, mas então teu problema seria tambem setar a data especifica dentro dos objetos Date?
se for isso aconselho a olhar a classe GregorianCalendar, pois a classe Date ja tem os metodos para setar data deprecated.

Eu fiz assim, deu certo, alguem sabe de alguma forma melhor?

		Date data1 = new Date(), data2 = new Date();
		
		Calendar c1 = Calendar.getInstance();
		
		//Pega a primeira data
		c1.set(1980, 1, 1);
		data1.setTime(c1.getTimeInMillis());
		
		//Pega a segunda data
		c1.set(1981,1,1);
		data2.setTime(c1.getTimeInMillis());

		
		System.out.println((data2.getTime() - data1.getTime())/1000/60/60/24);

A funcao ficou assim:

	public long DiferencaDatas(String dataInicial, String dataFinal){
		
		Date data1 = new Date(), data2 = new Date();
		
		Calendar c1 = Calendar.getInstance();
		
		//Pega a primeira data
		c1.set(Integer.parseInt(dataInicial.substring(0, 4)), Integer.parseInt(dataInicial.substring(4, 6)), Integer.parseInt(dataInicial.substring(6, 8)));
		data1.setTime(c1.getTimeInMillis());
		
		//Pega a segunda data
		c1.set(Integer.parseInt(dataFinal.substring(0, 4)), Integer.parseInt(dataFinal.substring(4, 6)), Integer.parseInt(dataFinal.substring(6, 8)));
		data2.setTime(c1.getTimeInMillis());

		return (data2.getTime() - data1.getTime()) /1000/60/60/24;
	}

amigos , coloquei esta funcao no meu programa e ela nao funcionou , da uma exceção , estou com o mesmo problema de muitos , tenho uma data inicial e uma data final retorando em date . Até aí tdo bem só que na hora de calcular a diferença de dias entre a data inicial e final eu nao sei .

Ah so mais um coisa … como faço para saber qual dia da semana é a data que eu escolhi Ex : escolhi o dia 18 de novembro de 2008 e saber que dia da semana corresponde a esta data ?

Se puderem me ajudar eu agradeço !

c1.set(Integer.parseInt(dataInicial.substring(0, 4)), Integer.parseInt(dataInicial.substring(4, 6)), Integer.parseInt(dataInicial.substring(6, 8)));   

O que significa esta linha de código ?

http://guj.com.br/posts/list/108713.java

acho que pode ajudar!

O Integer.parseInt faz um parser para um inteiro.

o substring, segundo Eclipse:

[quote]String java.lang.String.substring(int beginIndex, int endIndex)
Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.

Examples:

“hamburger”.substring(4, 8) returns “urge”
“smiles”.substring(1, 5) returns “mile”[/quote]

E porque o meu código nao funciona ???

[code]// pega a data inicial
Date tx_data_inicial_data = (Date)tx_data_inicial.getValue();

	SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
	
	formato.format(tx_data_inicial_data);

String data1 = String.valueOf(formato.format(tx_data_inicial_data));

// pega a data final
Date tx_data_final_data = (Date)tx_data_final.getValue();

	formato.format(tx_data_final_data);

String data2 = String.valueOf(formato.format(tx_data_final_data));

// calcula a diferenca entre datas
public long DiferencaDatas(String datain, String datafin)
{

		Date data11 = new Date(), data22 = new Date();
		
		Calendar c1 = Calendar.getInstance();
		
		//Pega a primeira data
		c1.set(Integer.parseInt(datain.substring(0, 4)), Integer.parseInt(datain.substring(4, 6)), Integer.parseInt(datain.substring(6, 8)));
		data11.setTime(c1.getTimeInMillis());
		
		//Pega a segunda data
		c1.set(Integer.parseInt(datafin.substring(0, 4)), Integer.parseInt(datafin.substring(4, 6)), Integer.parseInt(datafin.substring(6, 8)));
		data22.setTime(c1.getTimeInMillis());

		return (data22.getTime() - data11.getTime()) /1000/60/60/24;
	}

// exibe resultado

long c = DiferencaDatas(data1,data2);
System.out.println©;

[/code]

ta dando uma exceção … eu selecionei a data inicial como 02/11/2008

Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “02/1”

Desista de usar substrings, aprenda a usar o SimpleDateFormat.