Java - Calcular dias entre fechas

   
Vista:

Calcular dias entre fechas

Publicado por Juan (18 intervenciones) el 10/08/2018 18:09:24
Buenas tardes, tengo una función para calcular la diferencia de años y meses entre fechas pero no se como hacer para calcular la diferencia entre días. Alguien me puede ayudar?

Gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static int calcularEdad(Date fechaNacimiento) {
 
    //INSTANCIA DEL CALENDARIO GREGORIANO
    Calendar fInicio = Calendar.getInstance();
    Calendar fFinal = Calendar.getInstance();
 
    //ESTABLECEMOS LA FECHA DEL CALENDARIO CON EL DATE GENERADO ANTERIORMENTE
    fInicio.setTime(fechaNacimiento);
    fFinal.setTime(new Date());
 
    int difA = fFinal.get(Calendar.YEAR) - fInicio.get(Calendar.YEAR);
    int difM = difA * 12 + fFinal.get(Calendar.MONTH) - fInicio.get(Calendar.MONTH);
    int difD = ?
 
    return difA;
}
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

Calcular dias entre fechas

Publicado por Yamil Bracho (2192 intervenciones) el 10/08/2018 18:14:31
public static long getDifferenceDays(Date d1, Date d2) {
long diff = d2.getTime() - d1.getTime();
return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
}
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

Calcular dias entre fechas

Publicado por Juan (18 intervenciones) el 10/08/2018 19:53:16
Gracias Yamil por tu respuesta. El caso es que quiero que en la misma función me devuelva tanto la diferencia de años(difA) como la diferencia de meses(difM) como la diferencia de días(difD). Esto lo haré de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int calcularEdad(Date fechaNacimiento, int valor) {
 
    //INSTANCIA DEL CALENDARIO GREGORIANO
    Calendar fInicio = Calendar.getInstance();
    Calendar fFinal = Calendar.getInstance();
 
    //ESTABLECEMOS LA FECHA DEL CALENDARIO CON EL DATE GENERADO ANTERIORMENTE
    fInicio.setTime(fechaNacimiento);
    fFinal.setTime(new Date());
    int difA = 0;
    int difM = 0;
    int difD = 0;
    if (valor == 1) {
        difA = fFinal.get(Calendar.YEAR) - fInicio.get(Calendar.YEAR);
        return difA;
    } else if (valor == 2) {
        difM = difA * 12 + fFinal.get(Calendar.MONTH) - fInicio.get(Calendar.MONTH);
        return difM;
    } else{
        difD = ?;
        return difD;
    }
}

Como saca la diferencia entre días? (diff).

Muchas Gracias.
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

Calcular dias entre fechas

Publicado por Mario (1 intervención) el 21/08/2018 23:21:02
Hola puedes utilizar le api de java 8 para manejar mejor las fechas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
 * 
 */
package com.las.fechas;
 
import static java.time.temporal.ChronoUnit.DAYS;
import static java.time.temporal.ChronoUnit.HOURS;
import static java.time.temporal.ChronoUnit.MINUTES;
 
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Month;
 
/**
 * @author cmark
 *
 */
public class Fechando {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//Fecha de inicio
		LocalDate ld1 = LocalDate.of(2014, Month.JANUARY, 7);
		//Segunda fecha 
		LocalDate ld2 = LocalDate.of(2015, Month.MAY, 10);
		//Diferencia de días entre las dos fechas
		long dias = DAYS.between(ld1, ld2);
		//Hora de la primer fecha
		LocalTime lt1 = LocalTime.of(7, 0);
		//hora de la segunda fecha
		LocalTime lt2 = LocalTime.of(9, 30);
		//Diferencia de horas entre las dos fechas
		long horas = HOURS.between(lt1, lt2);
		//Diferencia de minutos entre las dos fechas
		long minutos = MINUTES.between(lt1, lt2);
		//Mostramos la diferencia entre dias
		System.out.println("Días: " + dias);
		//Mostramos la diferencia entre horas de las dos fechas
		System.out.println("Horas:  " + horas);
		//Mostramos la diferencia de minutos de dos fechas
		System.out.println("Minutos: " + minutos);
	}
}
Saludos!!!
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

Calcular dias entre fechas

Publicado por Juan (18 intervenciones) el 22/08/2018 07:44:49
Gracias Mario por tu respuesta. Encontré esta función y es la que estoy utilizando. Estudiare la tuya.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
public static long calcularEdad(Date fechaNacimiento, int tipo) {
    // Fecha inicio
    Calendar calendarInicio = Calendar.getInstance();
    calendarInicio.setTime(fechaNacimiento);
    int diaInicio = calendarInicio.get(Calendar.DAY_OF_MONTH);
    int mesInicio = calendarInicio.get(Calendar.MONTH) + 1; // 0 Enero, 11 Diciembre
    int anioInicio = calendarInicio.get(Calendar.YEAR);
 
    // Fecha fin
    Calendar calendarFin = Calendar.getInstance();
    calendarFin.setTime(new Date());
    int diaFin = calendarFin.get(Calendar.DAY_OF_MONTH);
    int mesFin = calendarFin.get(Calendar.MONTH) + 1; // 0 Enero, 11 Diciembre
    int anioFin = calendarFin.get(Calendar.YEAR);
 
    int anios = 0;
    int mesesPorAnio = 0;
    int diasPorMes = 0;
    int diasTipoMes = 0;
 
    //
    // Calculo de días del mes
    //
    if (mesInicio == 2) {
        // Febrero
        if ((anioFin % 4 == 0) && ((anioFin % 100 != 0) || (anioFin % 400 == 0))) {
            // Bisiesto
            diasTipoMes = 29;
        } else {
            // No bisiesto
            diasTipoMes = 28;
        }
    } else if (mesInicio <= 7) {
        // De Enero a Julio los meses pares tienen 30 y los impares 31
        if (mesInicio % 2 == 0) {
            diasTipoMes = 30;
        } else {
            diasTipoMes = 31;
        }
    } else if (mesInicio > 7) {
        // De Julio a Diciembre los meses pares tienen 31 y los impares 30
        if (mesInicio % 2 == 0) {
            diasTipoMes = 31;
        } else {
            diasTipoMes = 30;
        }
    }
 
    //
    // Calculo de diferencia de año, mes y dia
    //
    if ((anioInicio > anioFin) || (anioInicio == anioFin && mesInicio > mesFin)
            || (anioInicio == anioFin && mesInicio == mesFin && diaInicio > diaFin)) {
        // La fecha de inicio es posterior a la fecha fin
        return -1;
    } else {
        if (mesInicio <= mesFin) {
            anios = anioFin - anioInicio;
            if (diaInicio <= diaFin) {
                mesesPorAnio = mesFin - mesInicio;
                diasPorMes = diaFin - diaInicio;
            } else {
                if (mesFin == mesInicio) {
                    anios = anios - 1;
                }
                mesesPorAnio = (mesFin - mesInicio - 1 + 12) % 12;
                diasPorMes = diasTipoMes - (diaInicio - diaFin);
            }
        } else {
            anios = anioFin - anioInicio - 1;
            System.out.println(anios);
            if (diaInicio > diaFin) {
                mesesPorAnio = mesFin - mesInicio - 1 + 12;
                diasPorMes = diasTipoMes - (diaInicio - diaFin);
            } else {
                mesesPorAnio = mesFin - mesInicio + 12;
                diasPorMes = diaFin - diaInicio;
            }
        }
    }
 
    //
    // Totales
    //
    long returnValue = -1;
 
    switch (tipo) {
        case 0:
            // Total Años
            returnValue = anios;
            break;
 
        case 1:
            // Total Meses
            returnValue = anios * 12 + mesesPorAnio;
            break;
 
        case 2:
            // Total Dias (se calcula a partir de los milisegundos por día)
            long millsecsPerDay = 86400000; // Milisegundos al día
            returnValue = (new Date().getTime() - fechaNacimiento.getTime()) / millsecsPerDay;
            break;
 
        case 3:
            // Meses del año
            returnValue = mesesPorAnio;
            break;
 
        case 4:
            // Dias del mes
            returnValue = diasPorMes;
            break;
 
        default:
            break;
    }
 
    return returnValue;
}
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
Revisar política de publicidad