2012-04-19 2 views
3

이 함수에 잘못된 날짜가 전달되고 IllegalFieldValueExcption이 throw되면 기본 날짜 인 0001-01-01을 반환하고 싶습니다. 그러나 아래 코드가 실행될 때 defaultDate에 생성 된 날짜는 0001-01-02입니다. 이는 잘못된 것입니다. 아무도 내가 뭘 잘못 보는거야?구문 분석 날짜 01-01-0001과 jodatime

public Date unmarshal(String string) {  
    DateTimeFormatter fmt = new DateTimeFormatter(null, DateTimeFormat.forPattern("yyyy-MM-dd").getParser()); 
    Date defaultDate = DateTime.parse("0001-01-01", fmt).toDate(); 

    try { 
     return formatter.parseDateTime(string).toDate(); 
    } 
    catch (IllegalFieldValueException e) { 
     return defaultDate; 
    } 
} 

편집 :

나는이와 처음 두 행을 업데이트하고 완벽 지금 노력하고 있습니다, 감사합니다! Joda 타임에서 기본 chronology는 ISO이기 때문에

Chronology chrono = GJChronology.getInstance(); 
Date defaultDate = new DateTime(0001, 01, 01, 10, 0, 0, 0, chrono).toDate(); 

답변

4

당신이 가지고있는 문제입니다. 이 달력 시스템은 오늘날 세계 대다수의 기업에서 사용하는 달력 시스템과 동일합니다. ISO 시스템은 1583 년 이전의 역사적 작업에 적합하지 않습니다. 즉, 오늘부터 윤년 규칙을 적용한 것입니다. 이는입니다. 이것은 예방 주사 달력입니다.

1583 년 전에 defaultDate을 ISO 연대기와 사용하지 않았습니다. 그러한 날짜를 사용해야하는 경우 Joda-Time에서 다른 연대표를 사용해야합니다.

+0

+1. "0001-01-01의 기본 날짜를 반환하려면"(jodatime 또는 not) 나쁜 냄새가납니다. 대신 null을 반환하는 것이 더 좋을까요? – leonbloy

+1

0001-01-01은 우리 시스템에 사용되는 '낮은 날짜'입니다. 생성하지 않았습니다. 단지 필요한 것일뿐입니다. –

+1

이것은 Oracle 데이터베이스의 null이 아닌 낮은 날짜에 대한 꽤 일반적인 날짜 값이기도합니다 –