Java - Diferencia de dias, meses y años entre dos fechas utilizando mi clase Fecha

 
Vista:

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!

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder