2010-05-01 34 views
11

wie Minuten in Tagen Stunden und Minuten in Java zu konvertieren (wir haben hier eine Woche, 7 Tage)wie konvertieren Minuten zu Tagen, Stunden, Minuten

public String timeConvert(int time){ 
    String t = ""; 

    int h = 00; 
    int m = 00; 

    // h= (int) (time/60); 
    // m = (int) (time % 60); 

    // if(h>=24) h=00; 

    if((time>=0) && (time<=24*60)){ 
     h= (int) (time/60); 
     m = (int) (time % 60); 
    }else if((time>24*60) && (time<=24*60*2)){ 
     h= (int) (time/(1440)); 
     m = (int) (time % (1440)); 
    }else if((time>24*60*2) && (time<=24*60*3)){ 
     h= (int) (time/(2880)); 
     m = (int) (time % (2880)); 
    }else if((time>24*60*3) && (time<=24*60*4)){ 
     h= (int) (time/(2880*2)); 
     m = (int) (time % (2880*2)); 
    }else if((time>24*60*4) && (time<=24*60*5)){ 
     h= (int) (time/(2880*3)); 
     m = (int) (time % (2880*3)); 
    }else if((time>24*60*5) && (time<=24*60*6)){ 
     h= (int) (time/(2880*4)); 
     m = (int) (time % (2880*4)); 
    }else if((time>24*60*6) && (time<=24*60*7)){ 
     h= (int) (time/(2880*5)); 
     m = (int) (time % (2880*5)); 
    } 

    t =h+":"+m ; 
    return t; 
} 

habe ich versucht, dies aber nicht funktionieren

danke

Antwort

21

Ein kürzerer Weg. (Angenommen, Zeit> = 0)

public String timeConvert(int time) { 
    return time/24/60 + ":" + time/60%24 + ':' + time%60; 
} 
8

Wenn Sie Java 6 verwenden, kann TimeUnit enum nützlich sein. Zum Beispiel:

TimeUnit.HOURS.convert(10, TimeUnit.DAYS) 

Dieser statische Aufruf wandelt 10 Tage in Stunden-Einheiten und gibt 240. Sie mit Zeiteinheiten von Nanosekunden spielen beginnen und enden mit DAYS.

Eigentlich ist TimeUnit von Java 5 verfügbar, aber in Version 6 wurden weitere Einheiten hinzugefügt.

--EDIT-- Nun, da ich Ihre Frage besser verstehe, verwenden Sie die Division und Rest Ansatz wie in der Antwort von Romain. Mein Tipp ist nur für die Umwandlung in eine einzelne Zeiteinheit nützlich.

+0

Danke, aber ich donno, wie diese zu verwenden, gibt es keine Dokumente darüber – Eddinho

+0

@tuxou: Es gibt die javadoc –

15

Wenn Sie dies selbst tun möchten, gehen Sie in die andere Richtung.

  1. Teilen Sie die Zahl von 60 * 24 (Das wird die Anzahl der Tage.)
  2. Dividieren der Rest von 60. (Das gibt Ihnen viele Stunden.)
  3. Der Rest # 2 ist die Anzahl der Minuten.
+0

, aber ich habe mehr als einen Tag meine Minuten auf 0 endet auf 10080 i beginnen wird 136: 30 haben mit diesem Algorithmus – Eddinho

+3

Romains Methode funktioniert gut, solange Sie sowohl den Quotienten als auch den Rest in jedem der ersten beiden Fälle nehmen. Wenn Sie 1600 Minuten haben und durch (60 * 24) dividieren, ist der Quotient 1 und der Rest ist 160, den Sie dann durch 60 dividieren. Der Quotient davon ist 2 und der Rest ist 40. So entspricht 1600 Minuten 1 Tag, 2 Stunden und 40 Minuten. –

+0

@Adrian Lopez - Danke für die Erklärung +1 –

4

1) Ihr Code wiederholt sich. Dies ist meiner Meinung nach ein Zeichen für schlechten Code.

2) Der Divisor sollte sich nicht mit der Anzahl der Tage ändern, da die Anzahl der Tage wenig mit der Anzahl der Minuten in einer Stunde zu tun hat.

Darüber hinaus, schauen Sie sich Romain Hippeau Ansatz an, er sagte Ihnen, wie es geht.

2

und die Antwort lautet:

public String timeConvert(int time){ 
    String t = ""; 

    int j = time/(24*60); 
    int h= (time%(24*60))/60; 
    int m = (time%(24*60)) % 60; 



    t =j + ":" + h + ":" + m; 
    return t; 
} 

was denken Sie diesen Code?

+0

Insgesamt ein schöner Ansatz, aber meine Vorschläge zur Verbesserung des Stils wäre: a) Verwenden Sie keine einzelnen Buchstaben Variablennamen b) Vermeiden Sie vor-deklarieren Variablen mit Werten, die nie verwendet werden, ist es besser zu tun, z "int Stunde = (Zeit% (24 * 60))/60;" – mikera

+0

Ich stimme nicht mit Punkt b überein, wo Mikira empfahl, so viel Code wie möglich in eine Zeile zu stopfen. Wenn Sie jedoch die Variablen wie Eddinho in mundgerechte Schritte zerlegen, ist es für andere einfacher, durch Ihren Code zu gehen und zu sehen, was passiert. Wie für Punkt a) Dies ist ein guter Punkt. Ich würde auch von einzelnen Buchstabenvariablen abweichen, es sei denn, sie sind vorübergehend, während ich mir einen passenden Namen ausdenke. In diesen Fällen würde ich die Beschreibung auf den Typ der Variablen, z. s für string, ich für int, dt für DataTable usw. Große Lösung, Eddinho. Es funktioniert und elegant so! –

0

Ich verwende diesen Code. es kann auch helfen.

private String getText(int minutes){ 

    int weeks = minutes/10080; 
    int aboveWeeks = minutes % 10080; 
    int days = aboveWeeks/1440; 
    int aboveDays = aboveWeeks % 1440; 
    int hours = aboveDays/60; 
    int aboveHours = aboveDays % 60; 
    int minute = aboveHours/60; 

    if(weeks > 0 && days > 0) { 
     if(weeks > 1 && days > 1){ 
      return weeks + " weeks " + days + " days before"; 
     } else { 
      return weeks + " weeks " + days + " day before"; 
     } 
    } else if (weeks > 0){ 
     if (weeks > 1){ 
      return weeks + " weeks before"; 
     } else { 
      return weeks + " week before"; 
     } 
    } else if(days > 0 && hours > 0){ 
     if(days > 1 && hours > 1){ 
      return days + " days " + hours + " hours before"; 
     } else { 
      return days + " days " + hours + " hour before"; 
     } 
    } else if(days > 0){ 
     if (days > 1){ 
      return days + " days before"; 
     } else { 
      return days + " day before"; 
     } 
    } else if(hours > 0 && minute > 0){ 
     if(hours > 1 && minute > 1){ 
      return hours + " hours " + minute + " minutes before"; 
     } else { 
      return hours + " hours " + minute + " minute before"; 
     } 
    } else if(hours > 0){ 
     if (hours > 1){ 
      return hours + " hours before"; 
     } else { 
      return hours + " hour before"; 
     } 
    } else { 
     if (minutes > 1){ 
      return minutes + " minutes before"; 
     } else { 
      return minutes + " minute before"; 
     } 
    } 
} 
0
class time{ 
    public static void main (String args[]){ 
     System.out.println("Hello"); 
     int duration=1500; 
     String testDuration = ""; 

     if(duration < 60){ 
      testDuration = duration + " minutes"; 
     } 
     else{ 

      if((duration/60)<24) 
      { 
       if((duration%60)==0){ 
        testDuration = (duration/60) + " hours"; 
       } 
       else{ 
      testDuration = (duration/60) + " hours," + (duration%60) + " minutes"; 
       } 
      } 
      else{ 

       if((duration%60)==0){ 
        if(((duration/60)%24)==0){ 
         testDuration = ((duration/24)/60) + " days,"; 

        } 
        else{ 
        testDuration = ((duration/24)/60) + " days," + (duration/60)%24 +"hours"; 
        } 
       } 
        else{ 
       testDuration = ((duration/24)/60) + " days," + (duration/60)%24 +"hours"+ (duration%60) + " minutes"; 
        } 
      } 
     } 

     System.out.println(testDuration); 
    } 
} 
Verwandte Themen