2016-08-10 4 views
1

나는 많은 솔루션을 온라인으로 확인했지만 "hh : mm a"를 구문 분석 할 때 여전히 예외가 발생합니다. JSP에서DateTimeFormatter "hh : mm a"의 구문 분석 시간이 예외

: 자바에서

$('#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> 

:

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

예외 :

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

내가 하드 코딩하려해도 :

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

같은 문제가 있습니다. 단일 테스트 파일에서도. Java 8에서 String 만 구문 분석 할 수 없기 때문에 그렇습니까?

답변

4

Meno의 대답 이외에, 당신은해야합니다 대문자 AM 또는 PM 또는

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

날짜 정보가 없기 때문에 "hh : mm a"를 LocalTime으로 구문 분석 할 수 있지만 LocalDateTime으로 구문 분석 할 수는 없습니다. 파서가 왜 당신을 위해 임의로 날짜를 추측해야합니까? 나의 제안 선택 날짜 선택을 떠나 : 대조적으로

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

, SimpleDateFormat 오래 기본 날짜 1970-01-01, 유닉스 시대의 날짜를 사용합니다. 그러나 이것은 오래된 API의 합리적인 설계 결정이라고 생각하지 않으며 과 같은 시간 전용 유형이 없어서 java.util.Date의 인스턴트와 같은 인스턴스로 구문 분석하여 동기 부여를 얻었습니다.

1

이 두 가지 문제가 있습니다로 특산

에서 언급 한 바와 같이 당신이 만들 수있는 대소 문자를 구분하지 DateTimeFormatter,
  • LocalTime 대신 LocalDateTime을 사용합니다.
  • 패턴 문자 'a'는 대문자로 AM/PM을 지정해야한다는 것을 의미합니다. 전자, 당신은 DateTimeFormatterBuilder 전 사용하지 않는 :

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

관련 문제