Calcular la diferencia en días entre dos fechas con Joda Time (Java)
Vamos a calcular la diferencia en días entre dos fechas, utilizando la librería Joda Time. En el post Calcular la diferencia en días entre dos fechas en Java ya lo hicimos, pero esta vez utilizaremos una librería específica para trabajar con fechas y tiempo más completa que la que se incluye en Java.
Descarga de la librería
Nos dirigimos a la página oficial de Joda Time: http://www.joda.org/joda-time/, más concretamente aquí: https://github.com/JodaOrg/joda-time/releases . Descargamos el archivo joda-time-x.x.x-dist.tar.gz (donde x.x.x es el número de versión) y lo descomprimimos. Dentro estará el archivo que nos interesa: joda-time-x.x.x.jar .
Una forma de importarla en Eclipse es la siguiente: pulsando en menú Project / Properties / Java Build Path / Libraries / Add External JARs … y seleccionamos joda-time-x.x.x.jar .
Uso de la librería
Veamos un ejemplo:
import org.joda.time.*;
public class Principal {
public static void main(String[] args) {
DateTime inicio = new DateTime(2015, 1, 1, 3, 0, 0, 0);
DateTime fin = new DateTime(2015, 3, 1, 0, 0, 0, 0);
int dias = Days.daysBetween(inicio.toLocalDate(),fin.toLocalDate()).getDays();
System.out.println(dias);
}
}
La salida será 59 , que corresponde a la diferencia en días entre el día 01/01/2015 y el día 01/03/2015 .
Como vemos, el código es muy sencillo: creamos un objeto DateTime para la fecha inicio y otro para la fecha final. Llamamos al método daysBetween de la clase Days , pasándole como argumentos los objetos DateTime (inicio y fin) . Cómo la salida de este método nos dará un objeto Days, lo pasamos a int mediante el método getDays de esa misma clase.
Igualmente podemos calcular los meses entre dos fechas:
int meses = Months.monthsBetween(inicio.toLocalDate(),
fin.toLocalDate()).getMonths();
System.out.println(meses);
Esta librería es muy completa en lo que a operaciones con fechas se refiere y es recomendable su uso en caso tener que hacer cálculos complejos de tiempo, usando zonas horarias, etc
Fuentes
http://www.joda.org/joda-timeTweet