2017-11-27 1 views
4

ich 08.24.55 zu analysieren versuche (HH: mm: ss) und 08.24.55 (H : mm: ss) mit LocalTime.parse() Methode in Java 8 Below-Code ausgeführt und druckt die erfolgreich erhalten 08.24.55:Parse HH: mm: ss und H: mm: ss für einzelne Localtime DateTimeFormatter in java8 mit

LocalTime time=LocalTime.parse("08:24:55", DateTimeFormatter.ofPattern("HH:mm:ss")); 
System.out.println(time); 

aber der gleiche Satz von Code nicht für die Eingabe 08.24.55 und wirft Fehler:

Exception in thread "main" java.time.format.DateTimeParseException: Text '8:24:55' could not be parsed at index 0

Vorschläge, was getan werden könnte, um beide Szenarien zu behandeln?

+0

Vielleicht könnten Sie eine bedingte tun Muster basierend auf der Länge der Zeichenfolge? ZB: if (times.length() == 8) {pattern = "HH: mm: ss"; } sonst if (timestr.length == 7) {pattern = "H: mm: ss"; } – zack6849

+1

@ zack6849, keine Notwendigkeit dafür. Sehen Sie die viel einfachere Lösung in der Antwort. –

+1

@ OleV.V. Sie werden vielleicht bemerkt haben, dass mein Kommentar vor Juan's Antwort war, tatsächlich habe ich seine Antwort verbessert, sobald ich sie gesehen habe, aber ich sehe keinen Grund, meinen Kommentar zu löschen. – zack6849

Antwort

5

Verwendung nur eines H in Ihrem Muster:

LocalTime time= LocalTime.parse("08:24:55", DateTimeFormatter.ofPattern("H:mm:ss")); 

Ausgang:

08:24:55

1

Sie können einige "mal" optional über machen:

DateTimeFormatter.ofPattern("H[H]:mm:ss") 
+4

Dies ist eher eine schlechte Idee, weil der optionale Teil nie erfolgreich sein wird und nur eine Leistungseinbuße verursacht. Lass es aus und sei glücklich mit "H: mm: ss". –

Verwandte Themen