Sé que hay muchas preguntas sobre SO sobre cómo llegar, pero quiero y, por ejemplo, usar la nueva API Java 8 Date. También conozco la biblioteca JodaTime, pero quiero una forma de trabajo sin bibliotecas externas.
La función necesita quejarse con estas restricciones:
- Prevenir errores a partir de la hora de guardar la fecha
- Los datos de entrada son dos objetos de fecha (sin hora, sé hora local de fecha, pero tengo que ver con instancias de fecha)
DAYS.between(localDate1, localDate2)
.Respuestas:
Si desea días calendario lógicos , use el
DAYS.between()
método dejava.time.temporal.ChronoUnit
:Si desea días de 24 horas literales (una duración ), puede usar la
Duration
clase en su lugar:Para obtener más información, consulte este documento .
fuente
Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays()
.today.atTime(0, 0)
que puedas hacertoday.atStartOfDay()
.ChronoUnit.DAYS.between(firstDate, secondDate)
Según los comentarios de VGR, esto es lo que puede usar:
fuente
Puedes usar
until()
:fuente
until
es que devuelve un objeto Period . Eso devolverá una cantidad de años / meses / días entre las dos fechas, no la cantidad real de días. Y getDays () en el Período solo devuelve la parte de días (sin tener en cuenta la cantidad de años o meses), en lugar de la cantidad total de días. La segunda versión funciona exactamente como se desea para obtener una cantidad de días entre dos fechas.Puedes usar
DAYS.between
desdejava.time.temporal.ChronoUnit
p.ej
fuente
Podemos usar el método between () de ChronoUnit enum:
ChronoUnit.DAYS cuenta días que completaron 24 horas .
fuente
Use los DÍAS en enum java.time.temporal.ChronoUnit . A continuación se muestra el código de muestra:
Salida: * Número de días entre la fecha de inicio: 2015-03-01 y la fecha de finalización: 2016-03-03 es ==> 368. ** Número de días entre la fecha de inicio: 2016-03-03 y la fecha de finalización: 2015-03-01 es ==> -368 *
fuente
Todo el mundo dice que use ChronoUnit.DAYS.entre pero eso solo delega a otro método que podría llamarse usted mismo. Entonces también podrías hacerlo
firstDate.until(secondDate, ChronoUnit.DAYS)
.Los documentos para ambos en realidad mencionan ambos enfoques y dicen usar el que sea más legible.
fuente
Aqui tienes:
fuente
Obtenga el número de días antes de Navidad del día actual, intente esto
fuente
Si el objetivo es solo obtener la diferencia en días y dado que las respuestas anteriores mencionan acerca de los métodos de delegado, me gustaría señalar que una vez también puede simplemente usar:
fuente
fuente
Sé que esta pregunta es para Java 8, pero con Java 9 podría usar:
fuente
Use la clase o método que mejor satisfaga sus necesidades:
Una duración mide una cantidad de tiempo utilizando valores basados en el tiempo (segundos, nanosegundos).
Un período utiliza valores basados en fechas (años, meses, días).
El método ChronoUnit.between es útil cuando desea medir una cantidad de tiempo en una sola unidad de tiempo, como días o segundos.
https://docs.oracle.com/javase/tutorial/datetime/iso/period.html
fuente