# double in Uhrzeit umwandeln



## Problematisch (31. Mrz 2011)

Hallo,

ich schreibe gerade einen Gleitzeitsaldorechner als Swing-Anwendung.
Dieser hat zwei Funktionen, einmal die Differenz von zwei Uhrzeiten ermitteln und als Arbeitszeit ausgeben, entsprechend der regulären Arbeitszeit wird der Gleitzeitsaldo angezeigt. Das funktioniert auch schon soweit.
Des Weiteren, soll er nach Eingabe der Anfangszeit die Endzeit bestimmen, bis zu der man arbeiten müsste um einen Saldo von +/- 0 zu erreichen. Die Rechnungen enthalten einige Details, die hier unrelevant sind.

Das eigentliche Problem für die zweite Funktion besteht darin, dass ich aus einem JTextfield die eingegeben Uhrzeit auslese (als String), mit Hilfe eines DateFormats parse ich diesen String in ein Date. Mit getTime() kriege ich einen long und kann mit der Uhrzeit rechnen. Das Ergebnis, die Endzeit, ist ein double, zum Beispiel 15,50 (besser wäre 15:30).

Hat jemand eine Idee, wie ich meinen double mit zwei Nachkommastellen in eine Uhrzeit vom Typ HH:mm umwandeln kann?
Ich würde ansonsten mit einem StringTokenizer arbeiten, den String nach dem Punkt trennen und die Nachkommastelle in Minuten umrechnen und in einen neuen String mit Doppelpunkt dazwischen schreiben, aber ich dachte, dass es dafür vielleicht noch eine bessere Möglichkeit gibt.

Vielen Dank für eure Hilfe!


----------



## XHelp (31. Mrz 2011)

Die bessere Möglichkeit wäre einfach kein Double als Ergebnis zu bekommen...
Wie genau rechnest du denn da? Kannst du nicht mit Long weiter rechnen?


----------



## AmunRa (31. Mrz 2011)

naja komma Stellen abschneiden und diese mit 60 multiplizieren und wenn nötig runden.
dann hast du die Minuten


19.5 -> 0.5 *60= 30Minuten + 19 Stunden = 19:30;


----------



## ARadauer (31. Mrz 2011)

Du braucht die Stunden und Minuten?


```
double zeit = 15.5;
        int stunden = (int)zeit;
        double restZeit = zeit%1;
        int minuten = (int) (restZeit*60);        
        System.out.println("Stunden: "+stunden+" Minuten: "+minuten);
```


----------



## Problematisch (31. Mrz 2011)

Nein, kann ich nicht, da sich die Endzeit folgendermaßen berechnet:

Endzeit = Anfangszeit/1000.0/3600 + (reguläre) Tagestunden + Pausen

Die Pause beträgt 0.5 Stunden und die Tagesstunden, z.B. auch mal 7.8 Stunden (bei 39 Wochenstunden)


----------



## Problematisch (31. Mrz 2011)

Tut mir leid, ich war zu langsam. Die Variante von ARadauer klingt gut, das versuche ich mal aus. Danke!


----------



## ARadauer (31. Mrz 2011)

```
double zeit = 15.5;
        DateFormat df = new SimpleDateFormat("HH:mm");
        Date d = new Date((long) (zeit*60*60*1000));
        System.out.println(df.format(d));
```
das ginge auch...
aber warum kommt da jetzt 16:30 raus? is ja dumm, liegt an der sommerzeit oder?


----------



## Problematisch (31. Mrz 2011)

Deine andere Variante hat funktioniert. Allerdings fehlt mit im Saldo jetzt eine Minute (liegt wahrscheinlich am Runden), aber die ist nicht so tragisch.


----------



## AmunRa (31. Mrz 2011)

Du solltest wahrscheinlch besser nicht auf int casten sondern eher auf int runden


```
int minuten = Math.round(restZeit*60);
```


----------



## Problematisch (1. Apr 2011)

Hab ich. Ich musste allerdings noch die eine Methode schreiben um eventuell führende Nullen aufzufüllen, falls nötig.


----------



## FArt (1. Apr 2011)

Ärger dich nicht mit Pillepalle rum.. nimm was fertiges: Joda-Time - Java date and time API - Home


----------

