2016-04-05 2 views
0

Ich versuche, datetime um eine Dauer zu verschieben, die ich im Format "HHmm" bekomme, zum Beispiel "0010" bedeutet 10 Minuten.Wie kann die Dauer im Format "HHmm" mit JodaTime analysiert werden?

Ich habe ähnliche Ticket (Parsing time strings like "1h 30min") gefunden, aber ich kann es nicht richtig funktionieren.

Hier ist der Code:

PeriodFormatter hoursMinutes = new PeriodFormatterBuilder().appendHours().appendMinutes().toFormatter(); 
Duration duration = hoursMinutes.parsePeriod("0010").toStandardDuration(); 
duration.getStandardMinutes(); //Returns 600 

Aus irgendeinem Grund bekomme ich 600 Minuten statt 10. So sieht es aus wie die Minuten wie Stunden interpretiert wurden, aber ich kann nicht verstehen, warum. Ich habe versucht, .maximumParsedDigits(2) für Stunden hinzuzufügen, aber das Ergebnis war das gleiche.

Warum ist mein Code falsch? Gibt es eine andere Möglichkeit, den Dauerparser zu initialisieren? Etwas, wo ich einfach das Standardformat wie "HHmm" verwenden könnte?

Antwort

1

So war das Problem wirklich mit den maximalen analysierten Ziffern. Ich musste es nur vor Stunden, nicht Minuten hinzufügen. Also die Lösung ist das:

PeriodFormatter hoursMinutes = 
       new PeriodFormatterBuilder().maximumParsedDigits(2).appendHours().appendMinutes().toFormatter(); 
Duration duration = hoursMinutes.parsePeriod("0010").toStandardDuration(); 
duration.getStandardMinutes(); //Returns 10 
+0

Ah okay, du warst schneller +1, also löschte ich meine Antwort. Persönlich bevorzuge ich einen Muster-basierten Ansatz, zum Beispiel unter Verwendung meiner Lib Time4J: "Dauer d = Dauer.formatter (ClockUnit.class," #hmm "). Parse (" 0010 "); lange Minuten = ClockUnit.MINUTES.convert (d); System.out.println (Minuten); // 10' –

+0

Ich mag auch Ihre Lösung mehr, aber ich möchte keine andere Bibliothek nur dafür hinzufügen. – NeplatnyUdaj

+0

Fairer Punkt, Migration ist immer Arbeit. –

0

Nach den documentation:

getStandardMinutes

public long getStandardMinutes()

Ruft die Länge dieser Dauer in Minuten unter der Annahme, dass die Standard-Anzahl von Millisekunden in einer Minute ist. Bei dieser Methode wird davon ausgegangen, dass 60 Sekunden in einer Minute und 1000 Millisekunden in einer Sekunde liegen. Alle aktuell gelieferten Chronologien verwenden diese Definition.

Dies gibt getMillis()/60000 zurück. Das Ergebnis ist eine ganzzahlige Division, , daher werden überschüssige Millisekunden abgeschnitten.

Returns: die Länge der Dauer in Sekunden Standard

als 600 Seeing tatsächlich 10 Minuten in Sekunden (60 * 10) ist, haben Sie die Antwort, die Sie erwarten.

+0

Ich glaube nicht, die Dokumentation sagt, was Sie bedeuten. Das Problem liegt nicht im 'getStandardMinutes()', sondern im Duration-Wert. Wenn ich 'getStandardHours()' aufrufen, wird '10' ausgedruckt. Wenn ich diese Dauer zur ReadableInstant wie DateTime hinzufüge, wird es wirklich um 10 Stunden, nicht 10 Minuten verschoben. – NeplatnyUdaj

+0

Ich denke, die Dokumentation (Rückgabe) ist falsch. – NeplatnyUdaj

+0

Also ja ... Dokumentation sagt was du implizierst, aber es lügt. 'getMillis()/60000' ist offensichtlich kein Wert in Sekunden. – NeplatnyUdaj

Verwandte Themen