Diferencia de dias, meses y años entre dos fechas utilizando mi clase Fecha
Publicado por Luis (1 intervención) el 16/01/2018 10:46:42
Buenas!
Quiero crear una funcionalidad para calcular la diferencia entre dos fechas, pero sin usar clases de la API, es decir, "a pelo". He creado mi propia clase FechaImpl que podéis ver en el enlace a Github que he dejado.
Después de varios intentos, intentando hacerlo con un método que avanzara día a día y aumentase unos contadores, lo cuál es bastante poco eficiente. He creado otro algoritmo que calcula la diferencia de meses, de años y luego los días. Pero no funciona correctamente. Os dejo el código del método, utiliza mi clase FechaImpl, así que quizás debáis echarle un ojo.
¡Muchas gracias de antemano!
Un caso de prueba problemático:
fecha1 = (31,12,2018);
fecha2 = (1,1,2019);
Resultado obtenido= (0,0,1) / Resultado esperado = (1,0,0)
Por si queréis ver el código del método en Github, os lo dejo por aquí
Quiero crear una funcionalidad para calcular la diferencia entre dos fechas, pero sin usar clases de la API, es decir, "a pelo". He creado mi propia clase FechaImpl que podéis ver en el enlace a Github que he dejado.
Después de varios intentos, intentando hacerlo con un método que avanzara día a día y aumentase unos contadores, lo cuál es bastante poco eficiente. He creado otro algoritmo que calcula la diferencia de meses, de años y luego los días. Pero no funciona correctamente. Os dejo el código del método, utiliza mi clase FechaImpl, así que quizás debáis echarle un ojo.
¡Muchas gracias de antemano!
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
public static FechaImpl diferenciaEntreFechas(FechaImpl fecha1, FechaImpl fecha2) {
int contA = 0, contM = 0, contD = 0;
FechaImpl fechaResultado = new FechaImpl();
if (fecha1.compareTo(fecha2) == -1) {
FechaImpl fechaAux = fecha1;
fecha1 = fecha2;
fecha2 = fechaAux;
}
//Si las fechas son iguales
if (fecha1.compareTo(fecha2) == 0) {
fechaResultado = new FechaImpl(0, 0, 0);
} else {
// Calculando los meses
int auxMes1 = 12 - fecha1.getMes();
contM = auxMes1 + fecha2.getMes() - 1;
if (contM >= 12) {
contA++;
contM = contM - 12;
}
// calculando los años
int auxAno = fecha2.getAno() - fecha1.getAno();
if (auxAno >= 1) {
contA = contA + auxAno;
}
// calculando los dias
int auxD1 = fecha1.diasDelMes() - fecha1.getDia();
int auxD2 = fecha2.getDia();
contD = auxD1 + auxD2;
if (contD >= 30) {
contM++;
contD = contD - 30;
}
if (contM >= 12) {
contA++;
contM = contM - 12;
}
fechaResultado = new FechaImpl(contD - 1, contM, contA);
}
return fechaResultado;
}
Un caso de prueba problemático:
fecha1 = (31,12,2018);
fecha2 = (1,1,2019);
Resultado obtenido= (0,0,1) / Resultado esperado = (1,0,0)
Por si queréis ver el código del método en Github, os lo dejo por aquí
Valora esta pregunta


0