Best Practice Datum Differenz aus zwei Strings ermitteln

julianpe

Aktives Mitglied
Hallo,
ich möchte gerne die Tage Differenz zwischen zwei Strings ermitteln

Bsp:
String StrDatum1 = "2017-10-07";
String StrDatum2 = "2017-10-21";

Als Ergebnis sollte dann als Integer= 14 rauskommen.

Das ist mein bisheriger Code:

Java:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
       
        // Umwandlung Datum String in Calender (Zukunft)
        Calendar calFuture = Calendar.getInstance();
        try {
            calFuture.setTime(sdf.parse(StrDatum2));
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
       

       
        // Umwandlung Datum String in Calender (heute)
        Calendar calActual = Calendar.getInstance();
        try {
            calActual.setTime(sdf.parse(StrDatum1));
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

int iTimeDifference = calActual.compareTo(calFuture);

System.out.println(iTimeDifference);

Mein Output ist jedoch = -1
Woran hängt es noch?

Habt ihr vielleicht einfachere Möglichkeiten parat?

Besten Dank!
 
Das wäre die einfachere Variante mit Java8
Java:
LocalDate first = LocalDate.parse(StrDatum1);
LocalDate scnd = LocalDate.parse(StrDatum2);
long daysBetween = DAYS.between(first, scnd);
 
Das wäre die einfachere Variante mit Java8
Java:
LocalDate first = LocalDate.parse(StrDatum1);
LocalDate scnd = LocalDate.parse(StrDatum2);
long daysBetween = DAYS.between(first, scnd);

Sieht natürlich um einiges komfortabler aus!
Jedoch habe ich das Problem, dass ich DAYS nicht finde.

Java 8 müsste ich jedoch installiert haben...
Code:
C:\Windows\System32>javac -version
javac 1.8.0_101

C:\Windows\System32>java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode, sharing)
 
Bin jetzt folgenden Weg gegangen:
Code:
int iDiffDays = first.compareTo(scnd);

Klappt nun wie gewünscht - besten Dank für Deine Hilfe!
 
Pass auf ob du das wirklich willst (relevanter Code aus LocalDate.java):
Java:
int compareTo(LocalDate otherDate) {
    int cmp = (year - otherDate.year);
    if (cmp == 0) {
        cmp = (month - otherDate.month);
        if (cmp == 0) {
            cmp = (day - otherDate.day);
        }
    }
    return cmp;
}
Prüf also mal mit
2017-10-07
2016-10-07
 
Hiermit funktioniert es:
Code:
        long lDiffDays = java.time.temporal.ChronoUnit.DAYS.between(first, scnd);
Sieht natürlich im Code etwas unschön aus, dachte ich könnte DAYS direkt importieren.

@looparda :
Vielen Dank für die Bemerkung, wäre ohne Deinen Hinweis schnell wieder gegen die Wand gefahren!
 
Du kannst einen
Java:
import static java.time.temporal.ChronoUnit.DAYS;
...
long lDiffDays = DAYS.between(ldActual, ldLicence);
machen. Aber @Thallius Variante ist doch noch besser.
 

Zurück
Oben