Calcular días entre dos fechas en Java 8

Resuelto Marcos asked hace 9 años • 14 respuestas

Sé que hay muchas preguntas en SO sobre cómo obtener Datemensajes de correo electrónico en Java, pero quiero un ejemplo que utilice la nueva DateAPI 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:

  1. Evite errores desde el momento de guardar la fecha
  2. Las entradas son dos Dateobjetos (sin tiempo, lo sé LocalDateTime, pero necesito hacer esto con Dateinstancias)
Marcos avatar Nov 19 '14 06:11 Marcos
Aceptado

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 Durationclase 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 .

syntagma avatar Nov 18 '2014 23:11 syntagma

Según los comentarios de VGR, esto es lo que puede usar:

ChronoUnit.DAYS.between(firstDate, secondDate)
Sunil B avatar Nov 18 '2014 23:11 Sunil B

DÍAS.entre

Puedes usar DAYS.betweendesdejava.time.temporal.ChronoUnit

p.ej

import java.time.temporal.ChronoUnit;
...

long totalDaysBetween(LocalDate dateBefore, LocalDate dateAfter) {
    return DAYS.between(dateBefore, dateAfter);
Piotr Fryga avatar May 19 '2015 08:05 Piotr Fryga

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()));
Pawan avatar Feb 20 '2019 16:02 Pawan