it-swarm.com.de

Berechnen Sie Tage zwischen zwei Daten in Java 8

Ich weiß, dass es viele Fragen zu SO gibt, wie man sie bekommt, aber ich möchte ein Beispiel mit der neuen Java 8 Date API. Ich kenne auch die JodaTime-Bibliothek, möchte aber ohne externe Bibliotheken arbeiten.

Funktion muss sich mit diesen Einschränkungen beschweren:

  1. Verhindern Sie Fehler bei der Datumsspeicherung
  2. Eingabe sind zwei Objekte des Datums (ohne Zeit, ich kenne die Ortszeit, aber ich muss mit Datumsinstanzen zu tun haben)
174
Marcos

Wenn Sie logische Kalendertage wünschen, verwenden Sie die DAYS.between() -Methode aus Java.time.temporal.ChronoUnit :

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

Wenn Sie literal 24-Stunden-Tage, (a duration) möchten, können Sie stattdessen die Duration class verwenden:

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

Weitere Informationen finden Sie in diesem Dokument (und anderen Dokumenten zu Java 8 von Oracle).

295
syntagma

Basierend auf den VGR-Kommentaren können Sie Folgendes verwenden:

ChronoUnit.DAYS.between(firstDate, secondDate)
93
Sunil B

Sie können until() verwenden:

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));
29
nazar_art

Sie können DAYS.between aus Java.time.temporal.ChronoUnit verwenden.

z.B.

import Java.time.temporal.ChronoUnit;

public long getDaysCountBetweenDates(LocalDate dateBefore, LocalDate dateAfter) {
    return DAYS.between(dateBefore, dateAfter);
}
8
Piotr Fryga

Verwenden Sie die DAYS in enum Java.time.temporal.ChronoUnit . Unten ist der Beispielcode:

Ausgabe: * Anzahl der Tage zwischen dem Startdatum: 2015-03-01 und dem Enddatum: 2016-03-03 ist ==> 368 . ** Anzahl der Tage zwischen dem Startdatum : 2016-03-03 und Enddatum: 2015-03-01 ist ==> -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);

    }

}

Jeder sagt, ChronoUnit.DAYS.zwischen zu verwenden, aber das delegiert einfach an eine andere Methode, die Sie sich selbst nennen könnten. Sie könnten also auch firstDate.until(secondDate, ChronoUnit.DAYS) machen.

Die Dokumente für beide erwähnen tatsächlich beide Ansätze und sagen, dass derjenige zu verwenden ist, der besser lesbar ist.

5
nafg

Bitte schön:

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
PAA

Holen Sie sich die Anzahl der Tage vor Weihnachten ab dem aktuellen Tag, versuchen Sie dies

System.out.println(ChronoUnit.DAYS.between(LocalDate.now(),LocalDate.of(Year.now().getValue(), Month.DECEMBER, 25)));
2
survivor_27

get days zwischen zwei Datumsangaben ist eine Instanz von Java.util.Date

public static long daysBetweenTwoDates(Date dateFrom, Date dateTo) {
            return DAYS.between(Instant.ofEpochMilli(dateFrom.getTime()), Instant.ofEpochMilli(dateTo.getTime()));
        }
1
Mohamed.Abdo

Wenn das Ziel nur darin besteht, den Unterschied in Tagen zu ermitteln, und da die obigen Antworten über Delegatmethoden erwähnen, möchten Sie darauf hinweisen, dass einmalig auch einfach -

public long daysInBetween(Java.time.LocalDate startDate, Java.time.LocalDate endDate) {
  // Check for null values here

  return endDate.toEpochDay() - startDate.toEpochDay();
}
0
levenshtein

Wenn starDate und endDate eine Instanz von Java.util.Date sind, neben @mohamed antwort

Integer noOfDays = ChronoUnit.DAYS.between(startDate.toInstant(), endDate.toInstant());

aber ChronoUnit.DAYS zählen Tage, die 24 Stunden zurückgelegt haben.

0
Pawan

Ich weiß, dass diese Frage für Java 8 ist, aber mit Java 9 könnten Sie Folgendes verwenden:

public static List<LocalDate> getDatesBetween(LocalDate startDate, LocalDate endDate) {
    return startDate.datesUntil(endDate)
      .collect(Collectors.toList());
}
0
Xxtreem