jueves, 1 de octubre de 2015

Calcular la diferencia en días entre dos fechas con Joda Time (Java)

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-time




9 Comentarios:

Fabian dijo...

¿Cómo lo utilizo para sumar una cantidad x a una fecha? Ej: 13/05/2016 + 2 = 15/05/2016.

Felipe Martínez D. dijo...

Hola Héctor.

Se haría así:


DateTime dateTime = new DateTime(2016, 5, 13, 0, 0, 0, 0);
dateTime = dateTime.plusDays(2);


Saludos.

Fabian dijo...

amigo estuve probando el codigo pero me tira un dato erroneo por ejemplo si calculo la diferencia entre 15/05/2016 y 16/05/2016 a en vez de tirar 1, da 364.Como puedo solucionar?

Felipe Martínez D. dijo...

Hola Héctor.

Debe funcionar correctamente. Muéstrame tu código.

Saludos.

Anónimo dijo...

Amigo pero funciona enviando las fechas como parametros?? ose no asi = new DateTime(2016, 5, 13, 0, 0, 0, 0); sino asi por ejemplo = new DateTime(FechaInicio);

Gracias por la respuesta

Felipe Martínez D. dijo...

Hola.

Aquí puedes ver las diferentes formas de crear el objeto DateTime: http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html

Saludos.

Unknown dijo...

amigo como paso de mileseg a date

Felipe Martínez D. dijo...

Hola.

Lo puedes hacer así:

Date date = new Date(millis);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = sdf.format(date);
System.out.println(formattedDate);



Saludos.

Angie Navarrete dijo...

Como puedo hacer la diferencia de fecha pero considerando anio de 360 ya que es dato financiero

Publicar un comentario

Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO