如果传递此函数的日期无效并且抛出了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();
答案 0 :(得分:4)
您遇到的问题是因为Joda-Time中的默认chronology是ISO 。该日历系统与当今世界大多数企业使用的日历系统相同。 ISO系统不适合1583年之前的历史作品,因为它从今天开始应用闰年规则 (这是一个文章日历)。
所以你不应该在1583年之前使用ISO {Chronology defaultDate
。如果你需要使用这样的日期,你必须在Joda-Time中使用不同的年表。