Dúvida sobre data!

Estou fazendo um programa que tenho que escolher um período inicial ( DD/MM/AAAA) e final (DD/MM/AAAA).

Eu queria saber como faço para pegar a diferença dessas datas em dias, p/ mim fazer um FOR e exetutar uma tarefa!

tambem tenho um problema parecido

se alguem souber de alguma coisa …

ai vai o topico que abri :

“tratar datas”


http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=35456

Pega o valor long de cada uma e subtrai, depois o valor long resultado transforma em um date novamente:

//...
Date d1 = new Date();
Date d2 = new Date();
long result = d2.getTime() - d1.getTime();
Date d3 = new Date(result);
//...

T+

esse exemplo passado serve para subtrair datas, queria saber como :

  • como eu faco para ver se uma data eh maior do que a outra ??
  • como somar 2 datas ??
  • como ver se uma data eh igual ou diferente da outra ??

Para comparar proceda assim:

int result = d1.compareTo(d2);
if (result == 0) {/*iguais*/} else 
if (result > 0) {/*d1 > d2*/} else 
if (result < 0) {/*d1 < d2*/}

Para somar basta fazer o mesmo da subtração, só troque o sinal.

T+

ok, consegui fazer as comparacoes …

obrigado

olá pessoal
agora me surgiu uma nova dúvida
uso a classe nachocalendar para datas
como faço para somar e subtrair datas com essa classe, por exemplo

12/11/2008 + 10 = 22/11/2008
12/11/2008 - 30 = 12/10/2008

obrigado

Vamos la:

Que tal usar uma solução elegante?!

http://www.portaljava.com/forum/posts/list/39260.page#148181

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Date.html#after(java.util.Date)
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Date.html#before(java.util.Date)

Somar duas datas!?!?! 10/10/2008 + 20/10/2005 = ?
Isso?! qual o sentido dessa soma?! vc geralmente soma meses, dias, anos, horas, segundos, etc a datas, mas não faz uma data mais outra data.

Em java vc faz operações com data usando a classe Calendar
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html

cal.add(Calendar.DATE, 5) //adiciona 5 dias a data
cal.add(Calendar.MONTH, 5) //adiciona 5 meses a data

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Date.html#equals(java.lang.Object)

Dificilmente um Date vai ser igual a outro pois ele vai comparar os millisegundos, aconselho usar Calendar.

Nunca mexi com nachocalendar, mas sendo um componente grafico, provavelmente não é ele quem vai fazer essas operações, pelo que vi no manual vc tem métodos para setar e obter Date dele, e de Date vc chega e faz o que vc quiser

Tirado do manual dele

// setting the date
datefield.setValue(new Date());
// getting the selected date 
Date choosed = (Date) datefield.getValue();

Criando e setando a data no Calendar

Calendar cal = Calendar.getInstance();
cal.setTime(date);

Ainda vale a pena estudar
http://java.sun.com/j2se/1.5.0/docs/api/java/text/DateFormat.html
http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html

/**
 * Método que retorna a diferença em dias entre duas Datas.
 * @param dataI Data1.
 * @param dataF Data2.
 * @return retorna a diferença EM DIAS entre as datas.
 */
public static int getDiferencaEmDiasEntreDuasDatas(Calendar dataI, Calendar dataF) {
     long m1 = dataI.getTimeInMillis();
     long m2 = dataF.getTimeInMillis();
     return (int) ((m2 - m1) / (24 * 60 * 60 * 1000));
}




/**
 * Método para somar ou subtrair Datas.
 * @param dmy O que deseja somar, Calendar.DATE para somar dias, Calendar.MONTH para somar meses, 
 *     Calendar.YEAR para somar anos.
 * @param qtde Valor que deseja somar, se quiser subtrair passe valor negativo (ex: -1).
 * @param data Data que deseja que seja somada.
 * @param formato Formato no qual a data está.
 * @return retorna a data somada no formato passado.
 */
public static String somarDatas(int dmy, int qtde, String data, String formato) {
  try {
    Date dt = new SimpleDateFormat(formato).parse(data);
    Calendar c = Calendar.getInstance();
    c.setTime(dt);
    c.add(dmy, qtde);
    data = new SimpleDateFormat(formato).format(c.getTime());
  }
  catch(ParseException e){ e.printStackTrace(); }

  return data;
}



/**
 * Método que retorna quantidade de meses de um período.
 * @param dataI Data Inicial.
 * @param dataF Data Final.
 * @return retorna a quantidade de meses de um período.
 */
public static int getQtdeMeses(Calendar dataI, Calendar dataF) {
	int meses = 0;
	boolean dataIniMaior = false;
	Calendar gc1, gc2;

	if (dataF.after(dataI)) {
		gc2 = (Calendar) dataF.clone();
		gc1 = (Calendar) dataI.clone();
	} else {
		dataIniMaior = true;
		gc2 = (Calendar) dataI.clone();
		gc1 = (Calendar) dataF.clone();
	}

	gc1.clear(Calendar.MILLISECOND);
	gc1.clear(Calendar.SECOND);
	gc1.clear(Calendar.MINUTE);
	gc1.clear(Calendar.HOUR_OF_DAY);
	gc1.clear(Calendar.DATE);

	gc2.clear(Calendar.MILLISECOND);
	gc2.clear(Calendar.SECOND);
	gc2.clear(Calendar.MINUTE);
	gc2.clear(Calendar.HOUR_OF_DAY);
	gc2.clear(Calendar.DATE);

	while (gc1.before(gc2)) {
		gc1.add(Calendar.MONTH, 1);
		meses = dataIniMaior ? --meses : ++meses;
	}

	return (meses == 0 || meses < 0) ? meses : meses;
} // fim qtdeMeses