Zeit von microsekunden auf Format mm:ss

matt89

Mitglied
ich habe eine Methode
Java:
public static String timeFormatter(long microtime)
diese wandelt eine Zeitangabe in Microsekunden in das Format "mm:ss" (minuten:sekunden) um.
zusätzlich soll die Methode..
- falls der das ergebnis negativ soll folgende Exception generieren:
Java:
throw new RuntimeException("Negativ time value provided");
- falls der Zeitwert größer als das Format "mm:ss"(minuten:sekunden)soll folgende Exception generieren:
Java:
throw new RuntimeException("Time value exceeds allowed format");

ich glaub ich muss des mit dem Rückgabewert irgendwie einen String hinbasteln weis aber net wie??
oder die Methode irgendwie erweiter bzw.überschreiben???? ?:L

die vorgegebenen Tests:

Java:
@Test
public void test_timeFormatter_10() throws Exception{
assertEquals("Wrong time Format","05:05", TaggedFile.timeFormatter(30586200L));
}


@Test
public void test_timeFormatter_08()throws Exception{
try{
//Call method with time value that underflows our format
TaggedFile.timeFormatter(-1L);
//We should never get here
fail("Time value underflows format; excepting exception");

}catch (RuntimeException s){
//Excepted
}
}

hier mein code:
Java:
public static String timeFormatter(long microtime) {
        if(microtime<0){                        //überprüft ob zeit negativ ist
            throw new RuntimeException("Negativ time value provided");
        }
        
        if(microtime>60000000){                 //überprüft ob das limit von format nicht überschreitet
            throw new RuntimeException("Time value exceeds allowed format");
        }
        return null;


Vielen Dank im Vorraus
 
Zuletzt bearbeitet von einem Moderator:
Mit 14 Beiträgen noch nicht verstanden wie man Sourcecode formatiert? Eine Schande... Auch deine bunten Farben helfen da nicht raus.
 
Die Fehlerbehandlung ist schon nicht schlecht - und berücksichtigt sogar den Typo aus der Aufgabenstellung.

Bei der Obergrenze müsste man noch mal rechnen. Was kann man den mit mm:ss maximal darstellen?. M.E. wäre das 99:59, also 99 Minuten und 59 Sekunden, ergo 99*60+59=5999 Sekunden. Bei kaufmännischer Rundung passen da also 5.999.499ms rein.

Wie könnte man vorgehen, um aus dem Millisekunden-Wert die geforderte Darstellugn zu machen?

Dazu ein paar Ansätze:
a: Millisekunden kaufmännnisch auf Sekunden runden:
Java:
int secs = Math.round( millisecs / 1000.0);

b: Minutenanteil ergibt sich ganzahliges Ergbenis der Divison der Sekunden durch 60

c: Sekundenanteil ergibt sich als Rest der o.g. Division.
 
es klappt wunderbar
Java:
 int secs = (int) Math.round( microtime / 1000.0);
          int min=(int) (secs/60);
ich komm auf min: 509 und sekunden: 30586

es soll aber als String "05:05" raus kommen

Ideen??
 
Ich sehe gerade, dass es um Mikrosekunden geht, nicht um Millisekunden - insofern muss man nicht durch 1.000, sondern durch 1.000.000 teilen.
Aber wie kommst du auf 5:05? Bei 30.586.200 Mikrosekunden müsste man doch 0:31 erwarten, oder?
 
Also die microtime zeit von 331938000 gibt er richtig als 05:31 aus
aber bei der microtime 305862000 kommt nur schmarn raus.
ich müsste die zwischen schritte irgendwie auf eine kommastelle bringen?? gibts da ne methode??

Meine Rechnung:
305862000 /1000000 = 305,862
305,862 / 60 = 5,0977 (das wären die Minuten mein vorschlag die irgendwie auf 5.0 bringen )
5,0977 - 5,0= 0,097 //das sind die sekunden in minuten
0,097 *60= 5,862 // hier dann wieder irgendwie aus den 5,862 -> 5,0 machen also nur die
stelle vor dem komma

Der Code:

Java:
public static String timeFormatter(long microtime) {
        String zeit = null;
        if(microtime<0){                        //überprüft ob zeit negativ ist
            throw new RuntimeException("Negativ time value provided");
        }
        else{
            
        }
        if(microtime>357539999){                 //überprüft ob das limit von format nicht überschreitet
            throw new RuntimeException("Time value exceeds allowed format");
            
        }
        else{
            
          int konstante = (int) (microtime);
          konstante=konstante/1000000;
          int min= (konstante/60);
          int sec= konstante-min*60;
          //System.out.println("zeitsekunden: " +sec);
          //System.out.println("zeitminuten: "+min);
          
          if(min < 10 && sec < 10){
              zeit = "0"+min+":"+"0"+sec;
          }
          if(min > 10 && sec < 10){
                  zeit = ""+min+":"+"0"+sec;
              }
          if(min < 10 && sec > 10){
                  zeit = "0"+min+":"+sec;
              }
          if(min > 10 && sec > 10){
                  zeit = ""+min+":"+sec;
              }
          
          
        }
        //System.out.println("Zeit"+zeit);
        return zeit;
    }

Tests:

Java:
//Time Formatter Fälle
//1.Fall 
@Test
public void test_timeFormatter_10() throws Exception{
assertEquals("Wrong time Format","05:05", TaggedFile.timeFormatter(30586200L));
}
//2.Fall 
@Test
public void test_timeFormatter_11() throws Exception{
assertEquals("Wrong time Format","05:55", TaggedFile.timeFormatter(35500000L));
}
//3.Fall 
@Test
public void test_timeFormatter_12() throws Exception{
assertEquals("Wrong time Format","55:05", TaggedFile.timeFormatter(330500000L));
}
//4.Fall 
@Test
public void test_timeFormatter_13() throws Exception{
assertEquals("Wrong time Format","55:55", TaggedFile.timeFormatter(335500000L));
}
@Test
public void test_timeFormatter_14() throws Exception{
assertEquals("Wrong time Format","05:31", TaggedFile.timeFormatter(331938000L));}
 
Java:
public static String timeFormatter(long microtime) {
 
        // [...] schnipp [...]
            
          int konstante = (int) (microtime);
          konstante=konstante/1000000;
          int min= (konstante/60);
          int sec= konstante-min*60;
          //System.out.println("zeitsekunden: " +sec);
          //System.out.println("zeitminuten: "+min);
          
          if(min < 10 && sec < 10){
              zeit = "0"+min+":"+"0"+sec;
          }
          if(min > 10 && sec < 10){
                  zeit = ""+min+":"+"0"+sec;
              }
          if(min < 10 && sec > 10){
                  zeit = "0"+min+":"+sec;
              }
          if(min > 10 && sec > 10){
                  zeit = ""+min+":"+sec;
              }
          
        // [...] schnapp[...]

Hast du dir das hier http://www.java-forum.org/java-basi...millisekunden-minuten-sekunden-umwandeln.html mal durchgelesen. Die Zeit lässt sich anders deutlich besser formatieren.
 
die grenze ist ja 359899999 und ich hab eine 9 zu wenig
wenn ich jetzt die 9 dazu schreib kommt ne fehler meldung
The literal 3598999999 of type int is out of range
 
habs jetzt so gemacht und
3598999999
ist noch immer rot unterringelt

Java:
long grenze=3598999999;
        if(microtime> grenze){
 

Zurück
Oben