337 votos

Número de días entre dos fechas en vez de Joda

¿Cómo puedo encontrar la diferencia en Días entre dos DateTime instancias? con diferencia de días, me refiero a que si de inicio es el lunes y termina el martes que espera un valor de retorno de 1 independientemente de las horas/minutos/segundos de las fechas de inicio y fin.

Days.daysBetween(start, end).getDays() me da 0 si el inicio es en la noche y al final de la mañana.

Edit: yo también estoy teniendo el mismo problema con otros campos de fecha así que tenía la esperanza de que habría una forma genérica para " ignorar " los campos de menor importancia.

En otras palabras, entre los meses de Febrero y 4 de marzo, también sería 1, así como el horario comprendido entre las 14:45 y las 15:12. Sin embargo a la hora de diferencia entre las 14:01 y las 14:55 0

394voto

chrispy Puntos 3678

Molesto, la respuesta de withTimeAtStartOfDay es malo, pero sólo ocasionalmente. Quieres:

Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()

Resulta que a veces "medianoche/inicio del día" significa 1 (luz ahorro ocurrir así en algunos lugares), que Days.daysBetween no maneja correctamente.

// 5am on the 20th to 1pm on the 21st, October 2013, Brazil
DateTimeZone BRAZIL = DateTimeZone.forID("America/Sao_Paulo");
DateTime start = new DateTime(2013, 10, 20, 5, 0, 0, BRAZIL);
DateTime end = new DateTime(2013, 10, 21, 13, 0, 0, BRAZIL);
System.out.println(daysBetween(start.withTimeAtStartOfDay(), end.withTimeAtStartOfDay()).getDays());
// prints 0
System.out.println(daysBetween(start.toLocalDate(), end.toLocalDate()).getDays());
// prints 1

189voto

Michael Borgwardt Puntos 181658

Esto debería funcionar:

 Days.daysBetween(start.withTimeAtStartOfDay() , end.withTimeAtStartOfDay() ).getDays() 
 

86voto

Bozho Puntos 273663

puede utilizar LocalDate :

Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays() 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X