Calcular días entre dos fechas en Java 8
Sé que hay muchas preguntas en SO sobre cómo obtener Date
mensajes de correo electrónico en Java, pero quiero un ejemplo que utilice la nueva Date
API de Java 8. También conozco la biblioteca JodaTime, pero quiero un método sin depender de bibliotecas externas.
La función debe cumplir con estas restricciones:
- Evite errores desde el momento de guardar la fecha
- Las entradas son dos
Date
objetos (sin tiempo, lo séLocalDateTime
, pero necesito hacer esto conDate
instancias)
Si desea días calendario lógicos , utilice DAYS.between()
el método de java.time.temporal.ChronoUnit
:
LocalDate dateBefore;
LocalDate dateAfter;
long daysBetween = DAYS.between(dateBefore, dateAfter);
Si desea días literales de 24 horas (una duración ), puede usar la Duration
clase en su lugar:
LocalDate today = LocalDate.now()
LocalDate yesterday = today.minusDays(1);
// Duration oneDay = Duration.between(today, yesterday); // throws an exception
Duration.between(today.atStartOfDay(), yesterday.atStartOfDay()).toDays() // another option
Para obtener más información, consulte este documento: Java SE 8 Fecha y hora .
Según los comentarios de VGR, esto es lo que puede usar:
ChronoUnit.DAYS.between(firstDate, secondDate)
DÍAS.entre
Puedes usar DAYS.between
desdejava.time.temporal.ChronoUnit
p.ej
import java.time.temporal.ChronoUnit;
...
long totalDaysBetween(LocalDate dateBefore, LocalDate dateAfter) {
return DAYS.between(dateBefore, dateAfter);
Si startDate y endDate son instancias de java.util.Date
Podemos usar el método Between() de la enumeración ChronoUnit :
public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive) {
//..
}
ChronoUnit.DAYS cuenta los días que completaron 24 horas .
import java.time.temporal.ChronoUnit;
ChronoUnit.DAYS.between(startDate.toInstant(), endDate.toInstant());
//OR
ChronoUnit.DAYS.between(Instant.ofEpochMilli(startDate.getTime()), Instant.ofEpochMilli(endDate.getTime()));