Boa noite Colegas !
Meu problema:
Recebo uma data, tenho que subtrair de outra e obter a resposta em anos, meses ou dias…
Alguma dica para subtrair duas datas ?
[]s
Boa noite Colegas !
Meu problema:
Recebo uma data, tenho que subtrair de outra e obter a resposta em anos, meses ou dias…
Alguma dica para subtrair duas datas ?
[]s
talvez ajude http://joda-time.sourceforge.net/
Vixi amigo !
Acho que não entendi nada…
rsrsrs… mas valeu pela dica, vou quebrar um pouco a cabeça aqui.
[]s
uma outra alternativa, caso seja um calculo simples, é inverter a data, por exemplo, se você quiser souber quantos dias tem de 10-09-2008 até 10-08-2008, basta fazer (20081009 - 20081008)* 30 = 30 dias
o jodatime é uma API que facilita o calculo com datas, para fazer um calculo de diferença de dias você faria algo assim
Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();
para usar basta fazer o download e usar no seu projeto
Opa… muito obrigado !
Se não for abusar, existe como fazer isso usando as classes da API, como Date ou Calendar ?
:oops:
Desculpe pela dúvida de iniciante…
Aproveitando o gancho do Joda Time… como funciona isso ? São projetos desenvolvidos e disponibilizados de forma free ?
[]s
Opa… muito obrigado !Se não for abusar, existe como fazer isso usando as classes da API, como Date ou Calendar ?
você pode fazer dos dois jeitos
Date data1 = Calendar.getInstance().getTime();
System.out.println(data1);
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date data2 = dateFormat.parse("10/08/2009");
System.out.println(data2);
:oops:
Desculpe pela dúvida de iniciante…Aproveitando o gancho do Joda Time… como funciona isso ? São projetos desenvolvidos e disponibilizados de forma free ?
[]s
acha, o importante é ter duvidas e procurar respondê-las… o jodatime tá hospedado no sourceforge, portanto é um projeto open source, http://pt.wikipedia.org/wiki/Open_source
Encontrei este codigo tbm, porem foi implementado a força( hi hi )
public int Diferenca_Data(int data_atual, int data_prevista){
int aDia, aMes, pDia, pMes, pAno, dia;
int aux, i, aNumDiasMes, pNumDiasMes;
int flag=0;
aDia = data_atual/1000000;
aux = data_atual%1000000;
aMes = aux/10000;
pDia = data_prevista/1000000;
aux = data_prevista%1000000;
pMes = aux/10000;
pAno = aux%10000;
while (aMes > pMes){
if (flag == 1){
pMes = pMes + 1;
}
pNumDiasMes = NumMes(pMes,pAno);
if (aMes == pMes){
aux = aDia;
}else if (aMes > pMes && flag == 1){
aux = pNumDiasMes;
}else{
aux = pNumDiasMes - pDia;
}
for (i=aux;i>0;i--){
dia = 1 + dia;
}
flag = 1;
}
if (aDia > pDia){
aux = aDia - pDia;
for (i=aux;i>0;i--){
dia = 1 + dia;
}
}
return dia;
}
public int NumMes(int mes, int ano){
int NumDiasMes;
if ((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12))
{
NumDiasMes=31;
}
else if ((mes==4)||(mes==6)||(mes==9)||(mes==11))
{
NumDiasMes=30;
}
else
{
if (((ano % 4) == 0) && ((ano % 100) == 0))
NumDiasMes=29;
else if ((ano % 400) == 0)
NumDiasMes=29;
else
NumDiasMes=28;
}
return NumDiasMes;
}
Aqui neste codigo so nao calcula a subtração.
Vc teria que fazer isso.
Obrigado novamente…
Mas nesse exemplo que você deu não vi onde esta a subtração…
Date data1 = Calendar.getInstance().getTime();
System.out.println(data1);
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date data2 = dateFormat.parse("10/08/2009");
System.out.println(data2);
[]s
oi,
eu coloquei apenas formas de calcular uma data, para fazer a diferença entre elas você poderia fazer algo assim
Date date1 = new SimpleDateFormat("dd/MM/yyyy").parse("17/08/2008");
int data1 = Integer.parseInt(new SimpleDateFormat("yyyyddMM").format(date1));
Date date2 = new SimpleDateFormat("dd/MM/yyyy").parse("17/09/2008");
int data2 = Integer.parseInt(new SimpleDateFormat("yyyyddMM").format(date2));
System.out.println(data2+"-"+data1);
System.out.println("A diferença é:"+(data2-data1)*30+" dias");
mas eu ainda acho que o jodatime ajuda bastante, você vai escrever muito menos código
abs
apenas pra documentar, pra se ter no forum caso seja util pra alguém futuramente, ja que ja foi passado no msn...
diferença entre as datas exibindo quantos dias meses e anos (não somente em dias) se passaram entre 2 datas:
public void calcula(String dataI,String dataF){
try {
//setando o formato das datas para serem criadas
SimpleDateFormat f = new SimpleDateFormat("ddMMyy");
//setando as datas inicial e final
Date inicio = f.parse(dataI);
Date fim = f.parse(dataF);//eu queria chamar de final mais nao pode
int dia1 = inicio.getDate();
int mes1 = inicio.getMonth();//essa é util depois alem do coment acima
int ano1 = inicio.getYear();
int dia2 = fim.getDate();// = inicio.getDate();
int mes2 = fim.getMonth();// = inicio.getMonth();
int ano2 = fim.getYear();// = inicio.getYear();
//valor total de dias de cada mes, util pra dizer que passou
//1 mes e 5 dias ao invés de 35 dias
final int[] diasMes = {31,28,31,30,31,30,31,31,30,31,30,31};
//essas serão as finais mesmo
int dia=0;
int mes=0;
int ano=0;
//enquanto não for a mesma data
while( !( dia1 == dia2 && mes1 == mes2 && ano1 == ano2) )
{
//bisexto... tive problemas anteriores com o ano... por isso to
if (ano1%4==0)
diasMes[1]=29;
else
diasMes[1]=28;
dia++;//somando dias
//determina quando passo 1 mes
if (dia == diasMes[mes1]){
mes++;
dia = 0;//somo 1 mes e 0 dias
}
//determina quando passo 1 ano
if (mes == 12){
ano++;
mes = 0;//somou 1 ano e 0 meses
}
inicio.setDate(dia1+1);
//==============================================================
dia1 = inicio.getDate();
mes1 = inicio.getMonth();
ano1 = inicio.getYear();
System.out.println(dia1+"/"+mes1+"/"+ano1+" -- "+dia2+"/"+mes2+"/"+ano2);
//==============================================================
}
System.out.println("dias: "+dia+" meses: "+mes+" anos:"+ano);
//saida.setText("dias:"+dia+" meses:"+mes+" anos:"+ano);
} catch (ParseException ex) {
System.out.println("erro: ");ex.printStackTrace();
}
}
não é o jeito mais rápido de se obter isso mais, resolve o problema e não vai causar problemas de performance...