# Date subtrahieren?



## lord_fritte (26. Mrz 2010)

Hallo, ich bin java Anfänger, habe aber schon Erfahrung mit C/C++ und C#.
Und möchte 2 Date-Objekte subtrahieren um die Differenz(Jahre, Monate, Tage, Stunden, Minuten) zu ermitteln, aber leider musste ich feststellen dass das Date-Objekt über keine Operatoren verfügt.
Zuerst habe ich so versucht:

```
Date d1 = new Date(2010, 2, 6, 17, 49);
Date d2 = new Date(2010, 2, 6, 18, 49);
Date d3 = new Date(d2.getTime() - d1.getTime());
```
Aber da kommt irgendwie Mist raus angeblich:
Jahre: 70
Monate: 2
Tage: 4
Stunden: 2
Minuten: 0

Gibt es eine andere Lösung zum rechnen, welche auch Schaltjahre berücksichtigt?


----------



## Der Müde Joe (26. Mrz 2010)

GregorianCalendar (Java Platform SE 6)

EDIT:
oder wenns ganz wild kommt
Joda Time - Java date and time API - Home


----------



## eRaaaa (26. Mrz 2010)

Der long-Wert der Subtraktion, ergibt die Differenz in ms..musst also nur umrechnen


----------



## lord_fritte (26. Mrz 2010)

Der Müde Joe hat gesagt.:


> GregorianCalendar (Java Platform SE 6)
> 
> EDIT:
> oder wenns ganz wild kommt
> Joda Time - Java date and time API - Home



Leider scheint es das in Android nicht zu geben..



eRaaaa hat gesagt.:


> Der long-Wert der Subtraktion, ergibt die Differenz in ms..musst also nur umrechnen



Ne da kommt auch mist raus..

Ausserdem wohin umrechnen?? Der Konstruktor von Date erwartet doch Millisekunden??


----------



## eRaaaa (26. Mrz 2010)

lord_fritte hat gesagt.:


> Ne da kommt auch mist raus..




```
long d3 = d2.getTime() - d1.getTime();
```

Hä? Wieso das? Da kommt 3600000ms raus..das musst du nun in Stunden oder watt weiss ich in was du das alles umrechnen willst - umrechnen ! Modulo und/oder allgemeine Mathematik sind das einzige was man braucht. Per google lässt sich da sicherlich ansonsten auch schon was fertiges finden


----------



## lord_fritte (26. Mrz 2010)

Aber du sagtest da kommen Millisekunden raus, so sieht mein Konstruktor von Date aus: java.util.Date.Date(long milliseconds) das sind doch auch Millisekunden?


----------



## function (26. Mrz 2010)

die zeit rechnung startet nun mal erst bei 1970


----------



## eRaaaa (26. Mrz 2010)

....
Date (Java Platform SE 6)

```
Parameters:
date - the milliseconds since January 1, 1970, 00:00:00 GMT.
```

/edit: Schau mal hier: Java Blog Buch : D) Differenz zweier Daten


```
Date d1 = new Date(2010, 2, 6, 17, 49);
	Date d2 = new Date(2010, 2, 6, 18, 49);
	long difference = d2.getTime() - d1.getTime();
	int days = (int) (difference / (1000 * 60 * 60 * 24));
	int hours = (int) (difference / (1000 * 60 * 60) % 24);
	int minutes = (int) (difference / (1000 * 60) % 60);
	int seconds = (int) (difference / 1000 % 60);
	int millis = (int) (difference % 1000);
	System.out.println("Difference: " + days + " days, " + hours
		+ " hours, " + minutes + " minutes, " + seconds
		+ " seconds and " + millis + " milliseonds");
```

/edit achja apropros *g* : GregorianCalendar | Android Developers (Since: API Level 1)


----------



## lord_fritte (26. Mrz 2010)

eRaaaa hat gesagt.:


> ....
> Date (Java Platform SE 6)
> 
> ```
> ...



Aber Schaltjahre muss ich auch selber ausrechnen?? Wie gesagt ich komme aus der C# welt, da macht man d1 - d2 und fertig.. so was umständliches muss man da nicht machen.


----------



## faetzminator (26. Mrz 2010)

Von wo soll Date denn nur durch einen long wissen, wo der Bereich startet? Da kann er dir natürlich nicht mit Schaltjahren etc. aushelfen.


----------



## lord_fritte (26. Mrz 2010)

gute Frage


----------

