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!
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 :
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