2017-04-06 3 views
3

나는 "2017-04-06T21을 : 35 : 00Z"문자열을 구문 분석하려고 :LocalDateTime 구문 분석 오류 : DateTimeParseException

java.time.format.DateTimeParseException: Text '2017-04-06T21:35:00Z' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {InstantSeconds=1491514500, MicroOfSecond=0, MilliOfSecond=0, NanoOfSecond=0},ISO of type java.time.format.Parsed 
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920) ~[na:1.8.0_91] 
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855) ~[na:1.8.0_91] 
at java.time.LocalDateTime.parse(LocalDateTime.java:492) ~[na:1.8.0_91] 

을 그리고이 문자열을 구문 분석하는 방법이다 LocalDateTime 등을, 나는 예외는 아래에 주어진 얻을 :

: 나는 ISO_INSTANT 포매터를 사용하지만하여이 문자열을 구문 분석 할 수 물론

private static DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; 
LocalDateTime time = LocalDateTime.parse("2017-04-06T21:35:00Z", formatter); 

는, 내가 인해 다음 설명서를 ISO_INSTANT이 문자열을 구문 분석 할 수 있다는 것

문자열은 ISO_INSTANT 형식과 완전히 동일합니다. 이것이 코드가 작동하지 않는 이유입니다.

감사합니다.

+0

, 나는 쉽게 코드를 사용하여 문자열을 구문 분석 할 수 있습니다 코멘트에 넣고 충분한 명성을하지 않았나요 2017-04-06T21 : 35 : 00Z "));하지만 여전히 LocalDateTime.parse (string, DateTimeFormatter) 메서드가 작동하지 않는 이유가 없습니다. –

+0

나는 이것이 설계된 것이라고 생각합니다. 우리는 우연히'Instant'와'LocalDateTime'을 혼동하지 않았는지 확인하기를 원했고, 변환을위한 명시적인 시간 오프셋이나 영역을 주도록 강요했습니다. 따라서 LocalDateTime.ofInstant (Instant.parse ("2017-04-06T21 : 35 : 00Z"), ZoneOffset.UTC)'를 사용하십시오. 문자열이 기본 인스턴트 형식이기 때문에 포맷터가 필요하지 않습니다. –

+0

BTW, 포맷터를'private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("uuuu-MM-dd'T'HH : mm : ss'Z '")'로 초기화하면 코드가 작동합니다. 사람은 그것이 같다고 생각했을지도 모르지만 그렇지 않습니다. 나는 이전의 코멘트에서 여전히 전환을 선호 할 것이지만 맛의 문제입니다. –

답변

2

첫 번째 대답 here이 (가) 찾고있는 것 같습니다. "(`인스턴트 날짜 = Instant.from (formatter.parse :

는 그런데

관련 문제