# [Joda Time] Jahr, Tage, Stunden... vergangen seit Zeitpunkt



## pallidotcom (4. Sep 2014)

Hallo liebe Community,

ich würde gerne berechnen wieviele Jahre, Tage, Stunden, Minuten und Sekunden seit einem bestimmten Zeitpunkt vergangen sind. Ich habe nun die Joda Time Library entdeckt und es versucht:


```
String dateTime = "01/03/2000 17:00:00";
DateTimeZone.setDefault(DateTimeZone.forID("Europe/Berlin"));
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
DateTime startDate = dtf.parseDateTime(dateTime);
DateTime currentDate = new DateTime();

Period period = new Period(startDate, currentDate);
			
mYears = period.getYears();
mDays = period.getDays();
mHours = period.getHours();
mMinutes = period.getMinutes();
mSeconds = period.getSeconds();
```

Bis auf die Tage wird auch alles korrekt angezeigt und ich gehe davon aus, dass die Tage fehlerhaft sind, da ich keine Monate und Wochen ausgebe. Kann ich der Joda Period irgendwie beibringen, die Monate und Wochen mit auf die Tage zu zählen?

Wäre wirklich schön, wenn einer von euch einen Ansatz hat.


----------



## VfL_Freak (4. Sep 2014)

Moin,

Joda-Time - Java date and time API - Period
die Beispiele ganz am Ende sollten helfen 

Gruß
Klaus


----------



## pallidotcom (4. Sep 2014)

Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht mehr. 

Das Beispiel berechnet mir den Unterschied in Tagen oder in Monaten. Was ich brauche ist einen Unterschied der beiden Zeitpunkte in ein lesbares Format (Jahre, Tage, Stunden, Minuten) zu bringen.


----------



## VfL_Freak (4. Sep 2014)

Moin, 

ich verstehe jetzt Dein Problem nicht ganz!

Du holst Dir doch in den Zeilen 10 - 14 die entsprechenden Werte ....
Daraus kannst Du Dir doch locker wieder einen String (oder was auch immer ) basteln !
Mach' es entweder einzeln mit "toString" oder mit "String.format(...)" :bahnhof:

Gruß
Klaus


----------



## pallidotcom (4. Sep 2014)

Das Problem ist, dass bei period.getDays(); nicht die Wochen und Monate berücksichtigt werden sondern nur die Differenz zu dem Tag an dem das Startdatum war.

Beispiel: Wenn das Startdatum an einem Montag war und wir heute Donnerstag haben liefert period.getDays() = 3.

Fazit: Wenn ich die Differenz der beiden Zeitpunkte in folgendem Format darstellen wollen würde:

Jahre, Monate, Wochen, Tage, Stunden, Minuten, würde es wunderbar funktionieren. Ich möchte jedoch die Monate und Wochen bei den Tagen berücksichtigen.


----------



## VfL_Freak (4. Sep 2014)

Moin,



pallidotcom hat gesagt.:


> Fazit: Wenn ich die Differenz der beiden Zeitpunkte in folgendem Format darstellen wollen würde:
> Jahre, Monate, Wochen, Tage, Stunden, Minuten, würde es wunderbar funktionieren.
> Ich möchte jedoch die Monate und Wochen bei den Tagen berücksichtigen.


Bitte was ?? :bahnhof:
Kannst Du bitte vernünftig erklären, was genau Du erwartest und was Du stattdessen bekommst?
Am besten an konkreten Beispiel .....  :noe:

Gruß
Klaus


----------



## pallidotcom (4. Sep 2014)

```
String dateTime = "07/24/1963 17:00:00";
DateTimeZone.setDefault(DateTimeZone.forID("Europe/Berlin"));
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
DateTime startDate = dtf.parseDateTime(dateTime);
DateTime currentDate = new DateTime(DateTimeZone.forID("Europe/Berlin"));

Period period = new Period(startDate, currentDate);

int mYears = period.getYears();
int mDays = period.getDays();
int mHours = period.getHours();
int mMinutes = period.getMinutes();
int mSeconds = period.getSeconds();

System.out.println("Jahre: " + String.valueOf(mYears));             // Ausgabe: 51
System.out.println("Tage: " + String.valueOf(mDays));               // Ausgabe: 3 <--- FALSCH!!! 10 Tage!
System.out.println("Stunden: " + String.valueOf(mHours));           // Ausgabe: 21
System.out.println("Minuten: " + String.valueOf(mMinutes));         // Ausgabe: 53
System.out.println("Sekunden: " + String.valueOf(mSeconds));        // Sekunden: 10
```


----------



## VfL_Freak (4. Sep 2014)

hmm, jetzt bin noch mehr verwirrt :bahnhof:

Ok, die Ausgabe ist seltsam ... aber warum 10 ???

Das sollten doch 51 Jahre, 52 Tage, nn Stunden sein, oder ?
Von mir aus auch 51 Jahre, 1 Monat, 22 Tage, nn Stunden ....

Allerdings habe ich Period auch noch nie nutzen müssen, so dass mir auch noch vollkommen klar ist, wieso '3' zurückgegeben wird. Hier noch mal ein weiter Link:
GC: Period - org.joda.time.Period (.java) - GrepCode Class Source

*EDIT:*
hier noch ein weiterer Link mit interessanten beispieln :
Period and Duration (The Java™ Tutorials > Date Time > Standard Calendar)

Gruß
Klaus


----------



## turtle (4. Sep 2014)

```
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss");
		DateTime dtVergangenheit = dateTimeFormatter.parseDateTime("24.07.1963 17:00:00");
		DateTime dtNow = new DateTime(new Date());
		Days daysBetween = Days.daysBetween(dtVergangenheit, dtNow);
		System.out.println(daysBetween.getDays()); //18670
```


----------



## pallidotcom (5. Sep 2014)

Ich habe es nun hinbekommen. Entscheidend war folgender Parameter den ich der Period übergeben musste: PeriodType.yearDayTime()

Außerdem hatte ich noch den falschen Monat angegeben. Folgender Code ist rausgekommen:


```
String dateTime = "08/24/1963 17:00:00";
DateTimeZone.setDefault(DateTimeZone.forID("Europe/Berlin"));
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
DateTime startDate = dtf.parseDateTime(dateTime);
DateTime currentDate = new DateTime(DateTimeZone.forID("Europe/Berlin"));

Period period = new Period(startDate, currentDate, PeriodType.yearDayTime());

mYears = period.getYears();
mDays = period.getDays();
mHours = period.getHours();
mMinutes = period.getMinutes();
mSeconds = period.getSeconds();
```


----------

