2014-01-10 2 views
1

Joda 라이브러리의 DateTimeFormatter를 사용하여 String에서 DateTime 객체를 구문 분석하려고합니다. 어떤 이유로 그것은 구문 분석 할 시간대에 도달하면 예외를 던지고 있습니다.Joda DateTimeFormatter 표준 시간대를 설정할 때 throw되는 예외입니다. "형식이 잘못되었습니다."

protected static final String DEFAULT_TIMEZONE = "America/Denver"; 
    // Parse the date for the note 
    DateTimeFormatter dtFormatter = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm a ZZZ"); 
    String dateStr = defaultMonth + "/15/" + defaultYear + " 12:00 am " + DateTimeZone.forID(DEFAULT_TIMEZONE); 
    try { 
     DateTime noteDate = dtFormatter.parseDateTime(dateStr); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

스택 트레이스 :

java.lang.IllegalArgumentException가 : 잘못된 형식 : "2014년 11월 15일 오전 12시 미국/덴버가"에서, 부정 여기

내 코드입니다 "America/Denver" at org.joda.time.format.DateTimeFormatter.parseDateTime (DateTimeFormatter.java:683) at com.happyjacksoftware.emr.actions.AddreportnotesController.create (AddreportnotesController.java:56) at sun.reflect .NativeMethodAccessorImpl.inv java.lang.reflect.Method.invoke에서 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) 에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) 에서 oke0 (기본 방법) (방법 된 .java : 597)

실제로 입력 같은 시간에 복용하지 않는, 그래서 패턴 문자열 "MM/dd/yyyy ZZZ"을 시도했지만이 작동하지 않았고, 나는 DateTime 개체가 될 수있는 시간이 필요 어쩌면 생각 인스턴스화. 그러나 시간을 추가하는 것은 효과가 없었습니다.

참고 : 나는 패턴 문자열 "MM/dd/yyyy hh:mm a Z" 및 문자열 11/15/2014 12:00 am -0700으로 이것을 시도했고,이 일을하지만, 오프셋 숫자를 점점 나를 위해 훨씬 편리하다, 그래서이 시간대 ID를 사용하는 솔루션이 기대했다.

+1

'DateTime noteDate = dtFormatter.parseDateTime ("2015 년 11 월 15 일 12:00 am 미국/덴버");'나를 위해 잘 작동합니다. 특정 코드 행을 실행 해 볼 수 있습니까? – assylias

+0

Hmmm, 네가 위에 게시 한 "하드 코딩 된"문자열을 구문 분석하려고해도 동일한 예외 메시지가 발생합니다. java.lang.IllegalArgumentException : 잘못된 형식 : "2015 년 11 월 15 일 12:00 am America/Denver"가 형식이 잘못되었습니다. "America/Denver"에서. "나는 조다 라이브러리가 갑자기 꺼져 버린 것 같아서 서버를 청소했지만, 도움이되지 않았다. – rawkfist0215

+0

@PopoFibo - 예 ZZZ는 ZoneID를 의미합니다. –

답변

4

JodaTime 2.1 - 2.3에서 코드를 확인했는데 제대로 작동합니다. 나는 당신이 다른 방식으로 행동 할 수있는 오래된 버전을 사용한다고 생각합니다. Joda의 현재 버전에서 parseDateTime 메서드는 841 번째 줄에서 시작하고 스택 추적은 683 번째 줄에 오류를 표시합니다. 시간대 데이터베이스는 다르며 구문 분석 예외가 발생하기 때문입니다.

+0

[Works for me] (http://meta.stackexchange.com/questions/118992/are-works-for-me-answers-valid)는 실제로 답변이 아니라 주석입니다. 또한 OP 질문을하려면 댓글을 사용하십시오. 답변은 질문이 아닌 해결책을위한 것입니다. – Pshemo

+1

대답은 - 그가 JodaTime의 이전 버전을 사용한다는 것입니다. –

+0

JodaTime 1.6.2를 사용하고있는 것 같습니다. 나는 그것이 오래되었다는 것을 깨닫지 못했습니다 ... 최신 버전을 사용하면 도움이 될 것입니다. (이 문제없이 다른 프로젝트에서이 작업을 할 수 있었지만) – rawkfist0215

관련 문제