# mit Uhrzeit rechnen



## Mischka (27. Feb 2010)

moin,
die lösung für mein problem ist sicher nicht besonders schwer, doch ich finde sie einfach nicht im internet.

Ich würde eine uhrzeit oder einen festen zeitpunkt einer methode übergeben und diese soll mir dann die zeit in millisekunden bis da hin berechnen.

Beispiel:
Angenommen es ist 09:00 Uhr Systemzeit (Windows XP).


```
int ms = getTimeInMs(int jahr = 2010, int monat = 2, int tag = 27, int h = 10, int m = 0, int s = 0);
```
-> ms = 3600000

oder

```
int ms = getTimeInMs(int jahr = 2010, int monat = 2, int tag = 28, int h = 10, int m = 0, int s = 0);
```
-> ms = 90000000

Sry, ich habe noch nie mit Datümern gearbeitet und ich wäre für eine Hilfe echt Dankbar.

MFG
mischka


----------



## jeppi (27. Feb 2010)

Mischka hat gesagt.:


> die lösung für mein problem ist sicher nicht besonders schwer, doch ich finde sie einfach nicht im internet.



So trivial ist das gar nicht, wegen Sommerzeit etc.

Aber schau doch mal hier: Java Blog Buch : D) Differenz zweier Daten

Da wird auf die Problematik etwas eingegangen. Brauchst nur die Umrechnung in Tage rauszunehmen, weil Du ja Millisekunden brauchst. Viel Erfolg 

Edit: Als Startzeit nimmst Du dann natürlich einfach die aktuelle Zeit...


----------



## Mischka (27. Feb 2010)

naja, denn ganzen sommerzeit-kram brauche ich ja nicht, da ich ja nicht die echte zeit brauche, sondern nur die Differenz zwischen der Zeit meiners Computers und einer eingegebenen Zeit.

wenn dazischen eine zeitänderung stattfindet, muss mein pc das ja nicht mit einberechnen.


----------



## jeppi (27. Feb 2010)

Mischka hat gesagt.:


> wenn dazischen eine zeitänderung stattfindet, muss mein pc das ja nicht mit einberechnen.



Aber immer schön im Hinterkopf behalten...


----------



## DaveX (27. Feb 2010)

Hast du schon von Zeitstempeln gehört ?
es ist die verstrichene zeit in Sekunden seit 1970.

du kannst damit sozusagen sehr gut rechnen um Differenzen zwischen 2 Datumern zu bekommen.


```
long time1 = System.currentTimeMillis(); // die jetzige Zeit
java.sql.Date date1 = new java.sql.Date(time1 ); // die Zeit als datum, für spätere Anzeige 
long time2 = System.currentTimeMillis();
		   
long diff = time2 - time1; // hier kann man sehen wie viele milisekunden
// zwischen den funktionsaufrufen vergangen sind
date1.getTime(); // liefert ein long als zeitstempel in milisekunden
```

Dh. wenn du 2 datumer hast so wandelst sie in Timestamp mit getTime() und dann rechnest die differenz aus in milisekunden
am besten den absoluten wert wenn du nicht weisst welches datum früher und welches später liegt.

dann musst du nur wissen wie viel milisekunden haben 1 sekunde, 1minute, 1 std, 1 tag 
und mit geschicktem teilen hast du die differenz


----------



## Mischka (28. Feb 2010)

mir ist der unix-timestamp sehr wohl bekannt, doch habe ich gehofft, dass es in java schon fertige klassen gibt, die eine rumrechnerei überflüssig machen und ich durch ein paar erstellte objekte und übergabe von zwei Datümern eine Differenz zwischen beiden in ms bekommen könnte.

das objekt GregorianCalendar liefert mir scheinbar falsche werte zurück, aber wenn ich mich noch ein bisschen mehr reinlese, werde ich wohl zum gewünschten ergebniss kommen.

Vielen Dank für die antworten.
Problem gelöst!


----------



## DaveX (28. Feb 2010)

Mischka hat gesagt.:


> die eine rumrechnerei überflüssig machen und ich durch ein paar erstellte objekte und übergabe von zwei Datümern eine Differenz zwischen beiden in ms bekommen könnte.



Hier mal die Rumrechnerei 


```
public static long getDateDiff(Date date1, Date date2)
{
	return date1.getTime() > date2.getTime() ? date1.getTime() - date2.getTime() :  date2.getTime() - date1.getTime(); 
}
```


----------



## faetzminator (28. Feb 2010)

Oder noch kürzer

```
public static long getDateDiff(Date date1, Date date2) {
    return Math.abs(date1.getTime() - date2.getTime());
}
```


----------



## DaveX (28. Feb 2010)

Jep, ich dachte aber dass abs mehr zeit verbraucht, dabei wird einfach der unsigned Wert zurückgegeben, wenn mich nicht irre.


----------



## faetzminator (28. Feb 2010)

Das schon, aber schönerer, verständlicher Code geht in 99% der Programme/-teile der Geschwindigkeit vor.


----------



## DaveX (28. Feb 2010)

ich bevorzuge die Denke "make it run, make it fast!!" - wenn der Kunde fragt hmmm, welches algorithmus is denn schneller?
er muss ja nicht verstehen was dahinter steht, wenn beide gleich funktionieren - ich vermute er nimmt das schnellere - wer will schon heutzutage warten - das haben schon viele Dank VISTA gemacht ;D
Die Erklärung kann man ja in der Javadoc über der Funktion schreiben - aber dies wird ja überbewertet.


----------



## faetzminator (1. Mrz 2010)

DaveX hat gesagt.:


> wenn der Kunde fragt hmmm, welches algorithmus is denn schneller?



Wie viele Kunden haben das schon gefragt  ? Ich werde nur immer gefragt wie hoch die Kosten sind, wie die Stabilität ist etc.


----------

