ISO 8601 형식 문자열("2018- 02-13T10:20:12.120 0000") Java 8의 ZonedDateTime 클래스와 사전 정의된 형식 패턴을 사용하면 오프셋에 콜론이 누락되어 사용자에게 구문 분석 오류가 발생할 수 있습니다.
이 구문 분석 문제는 OffsetDateTime 클래스가 시와 분 사이에 콜론 없이 오프셋을 올바르게 구문 분석하지 못하게 하는 Java 8의 버그로 인해 발생합니다. 이 버그는 " 0000"과 같은 오프셋에 영향을 주지만 " 00:00"에는 영향을 미치지 않습니다.
파싱하기 전에 입력 문자열을 변경하여 누락된 콜론을 추가하세요:
<code class="java">String input = "2018-02-13T10:20:12.120+0000".replace("+0000", "+00:00"); OffsetDateTime odt = OffsetDateTime.parse(input);</code>
구문 분석을 안내하기 위해 특정 패턴으로 DateTimeFormatter를 정의합니다.
<code class="java">String input = "2018-02-13T10:20:12.120+0000"; DateTimeFormatter f = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); OffsetDateTime odt = OffsetDateTime.parse(input, f);</code>
자세한 내용 적용 가능한 형식 지정 패턴을 활용하려면 DateTimeFormatterBuilder:
<code class="java">DateTimeFormatter f = DateTimeFormatterBuilder.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX") .appendOffset("+HH:MM", "Z") .toFormatter(); OffsetDateTime odt = OffsetDateTime.parse(input, f);</code>
구문 분석을 단순화하려면 오프셋에 항상 콜론이 포함되도록 하고 시간과 시간을 모두 포함해야 합니다. 분(0인 경우에도), 패딩 0(-5 대신 -05:00)을 사용합니다.
<code class="java">Instant instant = odt.toInstant();</code>
<code class="java">ZoneId z = ZoneId.of("America/Montreal"); ZonedDateTime zdt = odt.atZoneSameInstant(z);</code>
위 내용은 Java 8의 OffsetDateTime 클래스가 \" 0000\"과 같은 오프셋이 있는 ISO 8601 문자열을 구문 분석하는 데 어려움을 겪는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!