>  기사  >  Java  >  Java 8의 오프셋에 콜론이 누락된 ISO 8601 날짜를 구문 분석하는 방법은 무엇입니까?

Java 8의 오프셋에 콜론이 누락된 ISO 8601 날짜를 구문 분석하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 21:30:30398검색

How to Parse ISO 8601 Dates with Missing Colon in Offset in Java 8?

오프셋에 콜론 없이 ISO 8601 형식의 데이터 구문 분석

문제

Java 8의 DateTimeFormatter는 시간과 시간 사이에 콜론이 없는 ISO 8601 문자열을 구문 분석하는 데 어려움을 겪습니다. 분 오프셋으로 인해 "2018-02-13T10:20:12.120 0000"과 같은 문자열을 Java 8 날짜로 변환하려는 사용자에게 어려움이 발생합니다.

해결책

Java 8까지 버그 수정:

Java 8의 버그가 해결될 때까지 다음 해결 방법을 사용하세요.

OffsetDateTime.parse( 
    "2018-02-13T10:20:12.120+0000" , 
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" )
)

Java 8 버그 수정 후:

OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" )

자세한 설명

잘못된 클래스 사용

Date, Calendar, SimpleDateFormat과 같은 레거시 클래스 사용을 피하고 최신 java.time 클래스를 사용하세요.

오프셋 전용 값에 OffsetDateTime 사용

오프셋은 있지만 시간대는 없는 값의 경우 OffsetDateTime을 사용하세요. ISO 8601 문자열은 일반적으로 java.time 클래스에서 사용되는 표준 형식을 준수합니다. 그러나 Java 8의 버그에는 해결 방법이 필요합니다.

Hacky 해결 방법

누락된 콜론을 포함하도록 입력 문자열을 조작합니다.

String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
OffsetDateTime odt = OffsetDateTime.parse( input );

더 강력한 해결 방법

명시적인 패턴으로 DateTimeFormatter 정의:

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 );

추가 고려 사항

  • 항상 콜론과 시, 분 모두와 함께 오프셋을 사용하세요.
  • 값을 UTC로 나타내려면 인스턴트 개체를 추출하세요.
  • 특정 지역의 벽시계 시간 렌즈를 통해 순간을 보려면 시간대를 적용하세요.

Java 8 버그 정보

Java 8 버그는 시간과 분 사이에 콜론이 누락된 오프셋의 구문 분석에 영향을 미칩니다. 이 문제는 0000과 같은 오프셋에 영향을 주지만 00:00에는 영향을 미치지 않습니다.

Java.time

java.time 클래스는 레거시 날짜 클래스를 대체하고 Java 8 이상에 내장되어 있습니다. 보다 현대적이고 효율적인 날짜-시간 처리 기능을 제공합니다.

위 내용은 Java 8의 오프셋에 콜론이 누락된 ISO 8601 날짜를 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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