用jodatime解析日期01-01-0001

时间:2012-04-19 13:31:37

标签: java date jodatime

如果传递此函数的日期无效并且抛出了IllegalFieldValueExcption,我希望返回默认日期0001-01-01。但是,当运行以下代码时,defaultDate中创建的日期为0001-01-02,这是错误的。有谁看到我做错了什么?

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

修改

我用这些更新了前两行,现在工作正常,谢谢!

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

1 个答案:

答案 0 :(得分:4)

您遇到的问题是因为Joda-Time中的默认chronology是ISO 。该日历系统与当今世界大多数企业使用的日历系统相同。 ISO系统不适合1583年之前的历史作品,因为它从今天开始应用闰年规则 (这是一个文章日历)。

所以你不应该在1583年之前使用ISO {Chronology defaultDate。如果你需要使用这样的日期,你必须在Joda-Time中使用不同的年表。