2016-08-10 3 views
1

Ich habe bereits viele Lösungen online überprüft, aber immer noch die Ausnahme beim Parsen von "hh: mm a".Parsing-Zeit mit DateTimeFormatter "hh: mm a" Ursache Ausnahme

In JSP:

$('#t2').timepicker({ 
         timeFormat : 'hh:mm a', 
         interval : 30, 
         maxTime : '11:00 pm', 
         startTime : '08:00 am', 
         dynamic : false, 
         dropdown : true, 
         scrollbar : true 
        }); 

... 

            <div class="form-group"> 
             <label 
              class="col-md-3 control-label">Start 
              Time</label> 
             <div class="col-md-7"> 
              <input type="text" 
               class="timepicker" 
               id="t1" 
               name="startTime" 
               readonly="readonly"> 
             </div> 
            </div> 

In Java:

String startTime = request.getParameter("startTime"); 
DateTimeFormatter formatterTime1 = DateTimeFormatter.ofPattern("hh:mm a", Locale.US); 
LocalDateTime localStartTime = LocalDateTime.parse(startTime, formatterTime1); 

Ausnahme:

java.time.format.DateTimeParseException: Text '08:00 am' could not be parsed at index 6 

Selbst wenn ich hart codieren versucht:

String startTime = "08:00 am" (08:00am, 8:00am); 

Es hat das gleiche Problem. Auch in einer einzigen Testdatei. Liegt das daran, dass Java 8 die Zeit nur mit String nicht analysieren kann?

Antwort

4

Neben Meno ‚s Antwort, müssen Sie Groß AM oder PM oder ein Groß- und Kleinschreibung DateTimeFormatter, die Sie als

String startTime = "08:00 am"; 
DateTimeFormatter formatterTime1 = new DateTimeFormatterBuilder() 
    .parseCaseInsensitive().appendPattern("hh:mm a").toFormatter(Locale.US); 
LocalTime localStartTime = LocalTime.parse(startTime, formatterTime1); 
3

Sie können "hh: mm a" zu einem LocalTime aber nicht zu einem LocalDateTime analysieren, da es keine Datumsinformation gibt. Warum sollte der Parser ein beliebiges Datum für dich erraten? Mein Vorschlag, die Wahl zu verlassen, die wählen Datum:

LocalTime localStartTime = LocalTime.parse(startTime, formatterTime1); 
LocalDateTime ldt = LocalDate.of(...).atTime(localStartTime); 

Im Gegensatz dazu alter SimpleDateFormat verwendet das Standarddatum 1970-01-01, das Datum der UNIX-Epoche. Aber ich denke nicht, dass dies eine vernünftige Design-Entscheidung der alten API ist und nur durch das Parsen zu einer augenblicklichen Instanz von java.util.Date motiviert wurde (wegen fehlender Nur-Zeit-Art wie LocalTime).

1

Es sind zwei Fragen zu bauen, als

von Meno erwähnt
  • Sie verwenden LocalDateTime anstelle von LocalTime
  • Musterbuchstabe 'a' bedeutet, dass Sie in Großbuchstaben AM/PM angeben müssen es sei denn, Sie e, verwenden DateTimeFormatterBuilder ex:

    LocalTime localStartTime = LocalTime.parse("08:00 AM", formatterTime1);

Verwandte Themen