[JAVA]Kann man diese Methode vereinfachen?

08/25/2013 02:57 South-Park#1
Die funktioniert zwar tadellos, schaut aber ein wenig kompliziert aus^^ (Ja, ich hab die selber gebaut) Bzw wenig unleserlich, was da genau abgeht. Hat jemand nen Vorschlag, wie man das vereinfachen könnte?
Code:
/**
     * It formats a specified Time in milliseconds to Format HH:MM:SS
     * 
     * @param milliseconds Time in Milliseconds which have to get formatted
     * @return Returns the Milliseconds in Format HH:MM:SS
     */
    public String getFileTimeFormatted(long milliseconds) {
        long time = milliseconds;
        long minutenZehner = 0;
        long minutenEiner;
        long sekundenZehner = 0;
        long sekundenEiner;
        long stunden, minuten, sekunden;
        String gesamtLänge;

        sekunden = TimeUnit.MILLISECONDS.toSeconds(time);
        minuten = TimeUnit.MILLISECONDS.toMinutes(time);
        stunden = TimeUnit.MILLISECONDS.toHours(time);

        sekundenEiner = sekunden;
        while (sekundenEiner >= 10) {
            sekundenZehner = (sekundenEiner / 10);
            sekundenEiner = (sekunden - (sekundenZehner * 10));
        }

        minutenEiner = minuten;
        while (minutenEiner >= 10) {
            minutenZehner = (minutenEiner / 10);
            minutenEiner = (minuten - (minutenZehner * 10));
        }
        while (minutenZehner >= 6) {
            minutenZehner -= 6;
        }
        while (sekundenZehner >= 6) {
            if (minutenEiner > 0) {
                sekundenZehner = sekundenZehner - minutenEiner * 6;
                if (sekundenZehner < 0) {
                    sekundenZehner = 0;
                }
            } else {
                sekundenZehner = 0;
            }
        }
        if (stunden > 0) {
            gesamtLänge = stunden + ":" + minutenZehner + minutenEiner + ":" + sekundenZehner + sekundenEiner;
        } else if (minutenZehner == 0 && stunden <= 0) {
            gesamtLänge = "0" + minutenEiner + ":" + sekundenZehner + sekundenEiner;
        } else {
            gesamtLänge = minutenZehner + minutenEiner + ":" + sekundenZehner + sekundenEiner;
        }
        return gesamtLänge;
    }
Ich blick da zwar durch, aber ohne die Doc darüber hats bis jetzt nur einer verstanden, der sich die Methode angeguckt hat :P
08/25/2013 04:22 'Aleo#2
Bei solchen Variablen ist es auch kein Wunder, dass man nicht durchblickt.
08/25/2013 05:25 South-Park#3
Wieso denn?

Wenn es doch im HH:MM:SS Format raussoll, ist das erste doch der Zehner und das zweite der Einer...
08/25/2013 10:56 DaKku0815#4
Hi,
also entweder die einer und zehner Stellen mit modulo errechnen.
PHP Code:
sekundenEiner sekunden 10;
sekundenZehner = (sekunden 10) % 6
(Stunde, Minute analog dazu)

oder noch einfacher:
PHP Code:
    public static String getFileTimeFormatted(long time) {
        
byte hour = (byte) (TimeUnit.MILLISECONDS.toHours(time)%24);
        
byte min = (byte) (TimeUnit.MILLISECONDS.toMinutes(time)%60);
        
byte sec = (byte) (TimeUnit.MILLISECONDS.toSeconds(time)%60);
        return ((
hour<10)?"0"+hour:hour)+":"+((min<10)?"0"+min:min)+":"+((sec<10)?"0"+sec:sec);
    } 
btw, wenn man sich den Umweg über TimeUnit.MILLISECONDS.to....(time) sparen will, dann kann alles auch manuel ausrechnen.
PHP Code:
byte hour = (byte) ((time / (1000 60 60)) % 24);
byte min = (byte) ((time / (1000 60)) % 60);
byte sec = (byte) ((time 1000) % 60); 
08/27/2013 22:31 South-Park#5
Das ende der verinfachung ist btw das da:
Code:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        Date dates = new Date(time);
        sdf.setTimeZone(TimeZone.getTimeZone("EN"));
System.out.println(sdf.format(dates));
Und ich reg mich so auf :P

Ich belass es aber bei meiner Version, da die da oben hässliche nullen hat, die meine automatisch wegkürzt