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 l'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 avec ces restrictions:

  1. prévenir les erreurs de date savetime
  2. les entrées sont deux objets de Date (sans heure, je connais localdatetime, mais je dois faire avec les instances de date)
144
demandé sur Bojan Petkovic 2014-11-19 02:06:25

9 réponses

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 littéral 24 heures jours , (a 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 re:Java 8 d'Oracle).

245
répondu 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
répondu 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
répondu 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
répondu 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. **Nombre de jours entre la date de début : 2016-03-03 et 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
répondu 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
répondu Prateek 2016-08-15 17:13:13

Tout le monde dit d'utiliser ChronoUnit.JOUR.entre mais cela ne fait que déléguer à une autre méthode que vous pourriez vous appeler. Donc, vous pouvez aussi faire firstDate.until(secondDate, ChronoUnit.DAYS).

Les documents pour les deux mentionnent réellement les deux approches et disent d'utiliser celle qui est la plus lisible.

3
répondu 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
répondu survivor_27 2017-10-06 02:39:50

Get jours entre deux dates 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
répondu Mohamed.Abdo 2018-10-02 14:16:16