2016-07-13 6 views
4

Gibt es mögliche Parse Zeit mit Datum wie "2016-07-13T25: 50" LocalDateTime mit Wert "2016-07-14T01: 50" zu bekommen? Ich möchte nur Joda Zeit und java.util verwenden.Joda Zeit Parsing Zeit mit mehr als 24 Stunden

+2

Sie wollen nicht, JSR-310 verwenden, die in Java 8 gebaut ist? –

+1

Ich frage mich nur: Woher kommt unsere Anforderung? Und das ist nur etwa 25 Stunden; Oder möchten Sie auch 99 Minuten akzeptieren? Oder 343 Minuten? – GhostCat

+0

Ich kann Java 1.8 nicht verwenden, weil das Projekt in 1.7 geschrieben ist. – Novros

Antwort

4

Sie können eine milde Chronologie in Joda-Time verwenden:

LenientChronology lenientChrono = LenientChronology.getInstance(ISOChronology.getInstance()); 
DateTimeFormatter formatter = 
    DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm").withChronology(lenientChrono); 
LocalDateTime ldt = formatter.parseLocalDateTime("2016-07-13T25:50"); 
System.out.println("lenient=" + ldt); // 2016-07-14T01:50:00.000 
2

Es scheint nicht möglich, ohne einen benutzerdefinierten Parser zu schreiben becase Joda und die Java 8 DateTime API (die weitgehend von Joda inspiriert ist) arbeitet mit dem ISO-8601-Kalendersystem und das lässt dieses Format nicht zu.

Zitat von Wikipedia bezüglich Dauer:

Alternativ kann ein Format für Dauer basierend auf kombinierten Datum und Uhrzeit Darstellungen kann nach Vereinbarung zwischen den kommunizierenden Parteien entweder im Basisformat PYYYYMMDDThhmmss oder im erweiterten Format P verwendet werden [JJJJ] - [MM] - [DD] T [hh]: [mm]: [ss]. Zum Beispiel wäre die erste oben gezeigte Dauer "P0003-06-04T12: 30: 05". Einzelne Datums- und Zeitwerte können jedoch ihre Moduli nicht überschreiten (z. B. wäre ein Wert von 13 für den Monat oder 25 für die Stunde nicht zulässig).

Eine Liste der verfügbaren DateTimeFormatters ist in der API docs verfügbar.