Java 8에서 ISO 8601 문자열 구문 분석의 어려움: 오프셋에 콜론 누락
Java의 날짜 및 시간 구문 분석 기능은 특히 처리할 때 실망스러울 수 있습니다. 오프셋에 콜론이 없는 ISO 8601 형식의 문자열을 사용합니다. 이 문제를 살펴보고 새로운 java.time API를 사용하여 솔루션을 제공하겠습니다.
문제 설명:
"2018-02-13T10과 같은 날짜 문자열을 구문 분석하려고 할 때 :20:12.120 0000" 레거시 java.util.Date 클래스를 사용하면 프로세스가 원활하게 성공합니다.
Date date = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ") .parse("2018-02-13T10:20:12.120+0000");
그러나 java.time의 최신 ZonedDateTime 클래스를 사용하면 동일한 형식이 실패합니다.
ZonedDateTime dateTime = ZonedDateTime.parse("2018-02-13T10:20:12.120+0000", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ"));
해결책:
문제는 구문 분석에 잘못된 클래스를 사용하는 데 있습니다. 전체 시간대를 나타내는 ZonedDateTime 대신 UTC와의 오프셋만 관련된 경우에는 OffsetDateTime을 사용해야 합니다.
OffsetDateTime odt = OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" , DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" ) );
임시 버그 해결 방법:
안타깝게도 , Java 8의 버그로 인해 시간과 분 사이에 콜론을 생략하는 오프셋 문자열을 구문 분석할 때 문제가 발생할 수 있습니다. 해결 방법으로 다음 중 하나를 수행할 수 있습니다.
해킹: 입력 문자열에서 누락된 콜론을 바꿉니다.
String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
형식 패턴 정의: DateTimeFormatter를 생성할 때 명시적인 형식 패턴을 사용합니다.
String input = "2018-02-13T10:20:12.120+0000" ; DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
추가 고려 사항:
UTC 값이 필요한 경우 Instant 개체를 추출하세요. 현지화된 시간의 경우 ZonedDateTime 클래스를 사용하여 시간대를 적용합니다.
결론:
적절한 클래스를 이해하고 버그를 처리하면 날짜를 효과적으로 구문 분석하고 조작할 수 있습니다. java.time API를 사용하여 ISO 8601 형식으로. 레거시 날짜 형식 문제를 방지하려면 가능할 때마다 최신 클래스를 활용하는 것을 잊지 마세요.
위 내용은 오프셋에 콜론이 없을 때 Java 8에서 ISO 8601 문자열을 구문 분석하는 것이 어려운 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!