2016-07-07 23 views
-5

Ich bin versucht, ein Programm zu schreiben, wo ich eine Zeichenfolge wieJava Umwandlung 1d2h3m in Millisekunden

5d2h7m (5 days 2 hours 7 minutes) 

und es wird

System.currentTimeMillis(); 

nehmen einfügen können und die 5 Tage 2 Stunden hinzufügen und 7 Minuten, um einen neuen Wert zu bekommen, den ich dann speichere. Später, wenn es nötig ist, kann ich die gespeicherte Zeit überprüfen, um zu sehen, ob sie abgelaufen ist.

Ich bin verwirrt, wie 5 Tage 2 Stunden und 7 Minuten in Millisekunden konvertieren.

Gibt es eine generische Java-Methode, die ich vermisse?

Edit: Ich versuche, die Zeichenfolge in Millisekunden zu konvertieren, nicht umgekehrt.

+2

Sie haben Code zu schreiben um Hilfe zu erhalten, die Entsendung Anforderungen und Wenn Sie keinen Versuch/Aufwand zeigen, bitten Sie nur andere, Ihre Arbeit kostenlos zu erledigen. –

+0

Sie können dafür das neue Paket [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) verwenden. Sehen Sie sich Dauer und Periode an. – ManoDestra

+0

Dann tun Sie einfach das Gegenteil des Duplikats, es ist so einfach, Sie müssen etwas Aufwand zeigen, um Hilfe mit dem vorhandenen Code zu bekommen. –

Antwort

0

Gibt es eine generische Java-Methode, die ich vermisse?

Nein, nicht im JDK. Sie müssen die Zeichenfolge selbst analysieren, wahrscheinlich unter Verwendung von java.util.regex, und dann die entsprechende Multiplikation und Addition selbst vornehmen.

+0

Ich habe die Zeichenfolge analysiert, dieser Teil war einfach. Es ist die Zeit -> Millisekunden, für die ich Probleme habe, eine Methode zu finden. –

1

Hier ist, was ich tat, um mein Problem zu lösen: (timeArgs ist ein String [], die aus der Zeichenfolge in dem Problem aufgeteilt wurde)

 long days = 0; 
     long hours = 0; 
     long minutes = 0; 

      for (int x = 0; x < timeArgs.length; x++) { 
       if (timeArgs[x].contains("d")) { 
        days = Long.parseLong(timeArgs[x].replace("d", "")); 
        break; 
       } else if (timeArgs[x].contains("h")) { 
        hours = Long.parseLong(timeArgs[x].replace("h", "")); 
        break; 
       } else if (timeArgs[x].contains("m")) { 
        minutes = Long.parseLong(timeArgs[x].replace("m", "")); 
        break; 
       } 
      } 

     long millis = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(days) + TimeUnit.HOURS.toMillis(hours) + TimeUnit.MINUTES.toMillis(minutes); // Current time plus other values 
     System.out.print("millis is " + millis); 
+0

* "timeArgs ist eine Zeichenfolge [], die von der Zeichenfolge im Problem getrennt wurde" * Wie? Zeigen Sie diesen Teil. Entfernen Sie außerdem unnötige Einrückungen. Herzlichen Glückwunsch zu Ihrer ersten Antwort! –

+0

Erwähnenswert: Die Verwendung von 'TimeUnit' ist eine Annehmlichkeit. In Wirklichkeit ist die Anzahl der Millisekunden an einem Tag variabel (DST, Schaltsekunden), aber wie oben verwendet, ist es eine Konstante: "1000L * 60 * 60 * 24". Und das Gleiche für die anderen. Immer noch ist "TimeUnit" da, und die Wiederverwendung vermeidet peinliche Fehler wie das Verpassen eines der "* 60" oder ähnliches. –