Java - socorro!num dias,meses o años entre dos fechas

 
Vista:

socorro!num dias,meses o años entre dos fechas

Publicado por riveiras (33 intervenciones) el 30/09/2009 18:17:16
Hola necesito calcular la diferencia entre dos fechas, y que me devuelva el numero de dias de diferencia. También los meses de diferencia y los años de diferencia entre las dos fechas.

private void calcularDif(String fec1,String fec2){
SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");
int dias,meses,anos=0;
try {
java.util.Date d1;
d1 = sdf.parse(fec1);

//fecha2
java.util.Date d2=sdf.parse(fec2);
System.out.println("fec1:"+fec1+",fec2:"+fec2);

long valor=0;
if(d1.getTime()>d2.getTime())
valor=d1.getTime() -d2.getTime();
else
valor=d2.getTime() -d1.getTime();

dias=(int) (valor/(1000*60*60*24));
meses=(int) (valor/(1000*60*60*24*30));
anos=(int) (valor/(1000*60*60*24*30*365));


System.out.println("dias:"+dias+",meses:"+meses+",anos:"+anos);
} catch (ParseException e) {
// TODO Bloque catch generado automáticamente
e.printStackTrace();
}
}

si llamo al método con los siguietnes valroes

this.calcularDif("01/01/2000","01/02/2000");
this.calcularDif("01/01/2000","01/01/2001");
this.calcularDif("01/01/2000","01/08/2001);

Los resultados que me devuelve son
CASO 1
dias:31,meses:1,anos:2
CASO 2
dias: 366,meses:18,anos:26
CASO 3
DIAS 577,meses:29,anos:42

podeis ayudarme a ver que hago mal????gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:socorro!num dias,meses o años entre dos fechas

Publicado por James (207 intervenciones) el 03/10/2009 02:22:14
Mira lo que haces podria funcionar pero te recominedo probar esta alternativa mejor estructurada y mas elegante
//creo unas fecahas para ejemplo
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
//pongo una fecha de compraracion
date2.set(2011, 9, 11);
Calendar aux = Calendar.getInstance();
//resto las fechas(la mayor de la menor o como sea tu caso)
aux.setTimeInMillis(date2.getTimeInMillis() - date1.getTimeInMillis());
//imprimo los datos
System.out.println("" + date1.get(Calendar.YEAR) + " " + date1.get(Calendar.MONTH) + " " +
date1.get(Calendar.DAY_OF_MONTH));
System.out.println("" + date2.get(Calendar.YEAR) + " " + date2.get(Calendar.MONTH) + " " +
date2.get(Calendar.DAY_OF_MONTH));
//A tomar en cuenta que el año minimo es 1970 por eso le resto esa cantidad
System.out.println("" + (aux.get(Calendar.YEAR) - 1970) + " " + aux.get(Calendar.MONTH) + " " +
aux.get(Calendar.DAY_OF_MONTH));

como veras es mas facil y mas claro de entender, solo queda poner los valores en variables, espero te sirva, Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:socorro!num dias,meses o años entre dos fechas

Publicado por riveiras (33 intervenciones) el 19/10/2009 08:51:49
Gracias James.
Al final lo realicé de la siguiente manera.
El método recibe dos fechas para calcular la diferencia y un parámetro valor que indica en que se devuelve la diferencia (1(en dias),2(en meses),3(en años))

public int diferenciaFechas(String fec1, String fec2,int valor)
{
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
int retorno=0;
java.util.Date date1 = null;
java.util.Date date2 = null;
try
{
Calendar cal1 = null;
date1=df.parse(fec1);
cal1=Calendar.getInstance();

Calendar cal2 = null;
date2=df.parse(fec2);
cal2=Calendar.getInstance();


// different date might have different offset
cal1.setTime(date1);
long ldate1 = date1.getTime() + cal1.get(Calendar.ZONE_OFFSET) + cal1.get(Calendar.DST_OFFSET);

cal2.setTime(date2);
long ldate2 = date2.getTime() + cal2.get(Calendar.ZONE_OFFSET) + cal2.get(Calendar.DST_OFFSET);

// Use integer calculation, truncate the decimals
int hr1 = (int)(ldate1/3600000); //60*60*1000
int hr2 = (int)(ldate2/3600000);

int days1 = (int)hr1/24;
int days2 = (int)hr2/24;

int dateDiff = days2 - days1;
int yearDiff = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR);
int monthDiff = yearDiff * 12 + cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH);


if(valor==1) {
if (dateDiff<0) dateDiff=dateDiff*(-1);
retorno=dateDiff;
}else if(valor==2){
if (monthDiff<0) monthDiff=monthDiff*(-1);
retorno=monthDiff;
}else if(valor==3){
if (yearDiff<0) yearDiff=yearDiff*(-1);
retorno=yearDiff;
}
}
catch (ParseException pe)
{
pe.printStackTrace();
}
return retorno;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:socorro!num dias,meses o años entre dos fechas

Publicado por Fel (3 intervenciones) el 04/11/2009 10:27:34
Espero que esto te sirva:
http://felinfo.blogspot.com/2009/09/calcular-la-diferencia-en-dias-entre.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cantidad de meses entre 2 fechas

Publicado por veronica (1 intervención) el 02/09/2011 21:35:39
public static final int getMonthsDifference(Date date1, Date date2) {
int m1 = date1.getYear() * 12 + (date1.getMonth()+1);
int m2 = date2.getYear() * 12 + (date2.getMonth()+1);
System.out.println("m1:" + m1);
System.out.println("m2:" + m2);
System.out.println(" m2 - m1 + 1:" + ( m2 - m1));

return m2 - m1 ;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

socorro!num dias,meses o años entre dos fechas

Publicado por Fernando (1 intervención) el 22/07/2021 07:09:56
import java.time.LocalDate;
import java.time.Period;
import java.util.Scanner;
public class diferenciaFechas {
public static void main(String[] args) {
System.out.print("\033[H\033[2J");
int aa,ma,da,an,mn,dn;
Scanner teclado = new Scanner(System.in);
System.out.print("Digite año de nacimiento: ");
an=teclado.nextInt();
System.out.print("Digite mes de nacimiento: ");
mn=teclado.nextInt();
System.out.print("Digite dia de nacimiento: ");
dn=teclado.nextInt();
LocalDate fechaNacimiento = LocalDate.of(an,mn,dn); //Metodo static of (cuaquier fecha YYYY-MM-DD)
System.out.print("Digite año a calcular: ");
aa=teclado.nextInt();
System.out.print("Digite mes a calcular: ");
ma=teclado.nextInt();
System.out.print("Digite dia a calcular: ");
da=teclado.nextInt();
LocalDate fechaACalcular = LocalDate.of(aa,ma,da);
System.out.println();
System.out.println("Fecha de Nacimiento: "+ fechaNacimiento);
Period periodofechaACalcular =Period.between(fechaNacimiento, fechaACalcular); //clase Period, funcion between
System.out.println();
System.out.println("A la fecha a calcular: "+ fechaACalcular);
System.out.print("Usted tendrá "+ periodofechaACalcular.getYears() +" años, "+ periodofechaACalcular.getMonths() +" meses y "+ periodofechaACalcular.getDays() +" días de vida.");
System.out.println();
Period periodo =Period.between(fechaNacimiento, LocalDate.now()); //Metodo static now (fecha actual YYYY-MM-DD), //clase Period, funcion between
System.out.println();
System.out.println("A la fecha de hoy; "+ LocalDate.now());
System.out.print("Usted tiene "+ periodo.getYears() +" años, "+ periodo.getMonths() +" meses y "+ periodo.getDays() +" días de vida.");
teclado.close();
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar