Tips, Soluciones y Novedades en Tecnología

22/02/2016

Fechas con JodaTime



Una de las cosas con las que he tenido que trabajar son las fechas, hacer operaciones con la librería Date del API de java, digamos que no es del todo amigable y fácil de hacerlo si queremos encontrar diferencias exactas en manejo de fechas.







Vamos a ver una librería que nos facilita mucho ese trabajo, hagamos los escenarios para el cual nos puede servir:






  • Encontrar Nro de días entre fechas

  • Diferencia entre fecha mayor y menor

  • Encontrar nro de meses entre dos fechas

  • Determinar intervalos entre 2 fechas. etc






Los que hace la librería JodaTime es tomar como base una fecha de partida (1970), a aparir de allí, hacer la contabilización y puede hacer todo tipos de operaciones lo que respecta a manejo de fechas.








Para incluirlo en nuestro proyecto solo basta con declarar en nuestro pom.xml o bajar directamente el .JAR (Lib) y agregarlo manualmente a nuestra librería.








1
2
3
4
5
6
7

<!-- JODA TIME -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
<!-- /JODA TIME-->





Hagamos un ejemplo para determinar los periodos entre 2 fechas, el código para dicha operación seria el siguiente.










 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

private static void calcularNroPeriodos(Date fecha1, Date fecha2) {
if (fecha1 != null && fecha2 != null) {
/**
* Parseamo al formato de fecha que maneja JodaTime
*/

DateTime myfecha1 = new DateTime(fecha1);
DateTime myfecha2 = new DateTime(fecha2);

/**
* Asignamos un instante es decir desde 1970 a la fecha actual
* registrado.
*/
Instant instanteFecha1 = myfecha1.toInstant();
Instant instanteFecha2 = myfecha2.toInstant();
/**
* Determino el intervalo, pero para ello debo saber que la fecha1
* sea mayor a la fecha2, para poder aplicar la regla. Con el
* instante de fecha ya se puede determinar que fecha es mayor
*/
if (instanteFecha1.getMillis() > instanteFecha2.getMillis()) {
Interval intervalTask = new Interval(instanteFecha1, instanteFecha2);

/**
* Y por ultimo defino el periodo
*/
Period periodo = intervalTask.toPeriod(PeriodType.dayTime());

/**
* Pueden explorar todos los metodos que tiene Periodo
*/
System.out.println("Nro de Años entre las fechas :" + periodo.getYears());
System.out.println("Nro de Meses entre las fechas :" + periodo.getMonths());
System.out.println("Nro de Dias entre las fechas :" + periodo.getDays());
}
}
}





Mas ejemplos en la pagina oficial del proyecto: http://www.joda.org/joda-time/



Saludos cordiales.



0 comments:

Publicar un comentario