2012-11-01 3 views
2

joda 라이브러리 (scala에는 있지만 java와 동일해야 함)를 사용하여 DateTime을 구문 분석하려고합니다.Joda DateTime : 문자열에 "CEST"가있는 구문 분석 날짜

소스 자바 이것은 불행하게도이 작동하지 않습니다

DateTimeFormatter dateParser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss z"); 
DateTime date = dateParser.parseDateTime("2012-08-28 15:35:00 CEST"); 

과 같을 것이다

val dateParser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss z") 
val date = dateParser.parseDateTime("2012-08-28 15:35:00 CEST") 

처럼 보이지만 예외가 발생합니다 :하지 않는 이유는

java.lang.IllegalArgumentException: Invalid format: "2012-08-28 15:35:00 CEST" is malformed at "CEST" 

을 이 일? 물론 "CEST"부분을 무시하고 나머지 부분을 파싱 할 수 있지만 "CEST"입력은 "CET"으로 바꿀 수 있으므로 무시하고 싶지 않습니다.

답변

4

CEST은 고유하지 않은 짧은 영역 이름이므로 문제가됩니다. DateTimeFormatter Bug parsing with general time zones in US Locale?

github의 최신 버전을 사용할 수 있습니다 (this commit 참조).

DateTimeFormatterBuilder#appendTimeZoneShortName을 사용하면 CEST을 "America/Chicago"의 별칭 또는 CEST의 해석 방법을 추가 할 수 있습니다.

+0

"2012-08-28 15:35:00 PDT"가 작동 중이므로 새 버전이 이미 있다고 생각합니다. 그래도 "CEST"또는 "CET"에 대한 언급은 없었습니다. 그럼에도 불구하고 그것을 파싱 할 방법이 있습니까? – Heinzi

+0

@Heinzi 당신이 joda-time-2.1을 사용했다고 가정했는데, 아직이 논리가 포함되어 있지 않습니다. 2.1의'PDT'는 작동하지 않습니다. 해결 방법은 내 업데이트 된 답변을 참조하십시오. – dan

1

당신이 CEST 때문에 해결 방법을 적용 할 수있는 java.util.Date 인스턴스와 구문 분석 Apply (적용)하는 것은 잘 해석되지 않기 때문에 고유하지 :이 해결 방법의

DateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
DateTime dateTime = new DateTime(dateParser.parse("2012-08-28 15:35:00 CEST")); 
//Here parsed `java.util.Date` instance is back to an instance of org.jodatime.DateTime` 

장점 : 버전이 시간대 작동 "신경 쓰지하기? ?? "