>  기사  >  Java  >  오프셋에 콜론이 없을 때 Java 8에서 ISO 8601 문자열을 구문 분석하는 것이 어려운 이유는 무엇입니까?

오프셋에 콜론이 없을 때 Java 8에서 ISO 8601 문자열을 구문 분석하는 것이 어려운 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 02:37:29267검색

Why Is It Difficult to Parse ISO 8601 Strings in Java 8 When the Offset Lacks a Colon?

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의 버그로 인해 시간과 분 사이에 콜론을 생략하는 오프셋 문자열을 구문 분석할 때 문제가 발생할 수 있습니다. 해결 방법으로 다음 중 하나를 수행할 수 있습니다.

  1. 해킹: 입력 문자열에서 누락된 콜론을 바꿉니다.

    String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
  2. 형식 패턴 정의: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.