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
9 Comentarios:
¿Cómo lo utilizo para sumar una cantidad x a una fecha? Ej: 13/05/2016 + 2 = 15/05/2016.
Hola Héctor.
Se haría así:
DateTime dateTime = new DateTime(2016, 5, 13, 0, 0, 0, 0);
dateTime = dateTime.plusDays(2);
Saludos.
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?
Hola Héctor.
Debe funcionar correctamente. Muéstrame tu código.
Saludos.
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
Hola.
Aquí puedes ver las diferentes formas de crear el objeto DateTime: http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html
Saludos.
amigo como paso de mileseg a date
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.
Como puedo hacer la diferencia de fecha pero considerando anio de 360 ya que es dato financiero
Publicar un comentario