3

如果这个函数被传递了一个无效的日期并且一个 IllegalFieldValueExcption 被抛出,我想返回一个默认的日期0001-01-01。但是当运行下面的代码时,创建的日期是defaultDateis 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();
4

1 回答 1

4

您遇到的问题是因为 Joda-Time 中的默认年表是 ISO。该日历系统与当今世界大部分地区的企业使用的日历系统相同。ISO 系统不适用于 1583 年之前的历史工作,因为它应用了从今天开始的闰年规则(它是一个预兆日历)。

所以你不应该使用defaultDate1583 之前的 ISO 年表。如果您需要使用此类日期,则必须在 Joda-Time 中使用不同的年表。

于 2012-04-19T13:50:40.690 回答