Calculer les jours entre deux dates en Java 8


Je sais qu'il y a beaucoup de questions sur SO sur la façon d'obtenir, mais je veux et exemple en utilisant la nouvelle api Java 8 Date. Je connais aussi la bibliothèque JodaTime, mais je veux un moyen de travail sans bibliothèques externes.

La fonction doit se plaindre de ces restrictions:

  1. Empêcher les erreurs de date savetime
  2. Les entrées sont deux objets de Date (sans heure, je connais localdatetime, mais j'ai besoin de faire avec les instances de date)
Author: Bojan Petkovic, 2014-11-19

9 answers

Si vous voulez logiques jours calendrier, utiliser DAYS.between() méthode de java.time.temporal.ChronoUnit:

LocalDate dateBefore;
LocalDate dateAfter;
long daysBetween = DAYS.between(dateBefore, dateAfter);

Si vous voulez jours littéraux de 24 heures , (une durée ), vous pouvez utiliser le Duration classe à la place:

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

Pour plus d'informations, reportez-vous à ce document (et à d'autres documents concernant Java 8 d'Oracle).

 245
Author: syntagma, 2017-09-04 22:31:29

Basé sur les commentaires de VGR voici ce que vous pouvez utiliser:

ChronoUnit.DAYS.between(firstDate, secondDate)
 80
Author: Sunil B, 2014-11-19 03:35:02

Vous pouvez utiliser until():

LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
LocalDate christmas = LocalDate.of(2014, Month.DECEMBER, 25);

System.out.println("Until christmas: " + independenceDay.until(christmas));
System.out.println("Until christmas (with crono): " + independenceDay.until(christmas, ChronoUnit.DAYS));
 23
Author: nazar_art, 2016-08-01 13:03:33

Vous pouvez utiliser DAYS.between à partir de java.time.temporal.ChronoUnit

Par exemple

import java.time.temporal.ChronoUnit;

public long getDaysCountBetweenDates(LocalDate dateBefore, LocalDate dateAfter) {
    return DAYS.between(dateBefore, dateAfter);
}
 7
Author: Piotr Fryga, 2015-05-19 08:20:24

Utilisez les JOURS dans enum java.temps.temporel.ChronoUnit . Voici l'exemple de code:

Sortie : * Le nombre de jours entre la date de début : 2015-03-01 et la date de fin : 2016-03-03 est ==> 368. **Le nombre de jours entre la date de début: 2016-03-03 et la date de fin: 2015-03-01 est = = > -368 *

package com.bitiknow.date;

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

/**
 * 
 * @author pradeep
 *
 */
public class LocalDateTimeTry {
    public static void main(String[] args) {

        // Date in String format.
        String dateString = "2015-03-01";

        // Converting date to Java8 Local date
        LocalDate startDate = LocalDate.parse(dateString);
        LocalDate endtDate = LocalDate.now();
        // Range = End date - Start date
        Long range = ChronoUnit.DAYS.between(startDate, endtDate);
        System.out.println("Number of days between the start date : " + dateString + " and end date : " + endtDate
                + " is  ==> " + range);

        range = ChronoUnit.DAYS.between(endtDate, startDate);
        System.out.println("Number of days between the start date : " + endtDate + " and end date : " + dateString
                + " is  ==> " + range);

    }

}
 3
Author: Pradeep Padmarajaiah, 2016-03-03 05:34:06

Voilà:

public class DemoDate {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        System.out.println("Current date: " + today);

        //add 1 month to the current date
        LocalDate date2 = today.plus(1, ChronoUnit.MONTHS);
        System.out.println("Next month: " + date2);

        // Put latest date 1st and old date 2nd in 'between' method to get -ve date difference
        long daysNegative = ChronoUnit.DAYS.between(date2, today);
        System.out.println("Days : "+daysNegative);

        // Put old date 1st and new date 2nd in 'between' method to get +ve date difference
        long datePositive = ChronoUnit.DAYS.between(today, date2);
        System.out.println("Days : "+datePositive);
    }
}
 3
Author: Prateek, 2016-08-15 17:13:13

Tout le monde dit d'utiliser ChronoUnit.JOUR.entre mais cela délègue juste à une autre méthode que vous pourriez vous appeler. Vous pouvez donc également faire firstDate.until(secondDate, ChronoUnit.DAYS).

Les documents pour les deux mentionnent en fait les deux approches et disent d'utiliser celle qui est la plus lisible.

 3
Author: nafg, 2018-01-07 02:01:52

Obtenez le nombre de jours avant Noël à partir du jour en cours , essayez ceci

System.out.println(ChronoUnit.DAYS.between(LocalDate.now(),LocalDate.of(Year.now().getValue(), Month.DECEMBER, 25)));
 1
Author: survivor_27, 2017-10-06 02:39:50

Obtenir des jours entre deux dates la date est une instance de java.util.Date

public static long daysBetweenTwoDates(Date dateFrom, Date dateTo) {
            return DAYS.between(Instant.ofEpochMilli(dateFrom.getTime()), Instant.ofEpochMilli(dateTo.getTime()));
        }
 0
Author: Mohamed.Abdo, 2018-10-02 14:16:16