我有以下用于解析日期的代码:
public Boolean isDate(String date, String dateFormat) {
try {
DateTimeFormat.forPattern(dateFormat).parseDateTime(date);
} catch(Exception e) {
return false;
}
return true;
}
这适用于较新的日期20071001
,例如 format yyyyMMdd
。但是对于早于 1970 年的日期,例如19600101
具有相同格式的yyyyMMdd
,该方法返回 false。
任何关于我如何解决这个问题的想法都将不胜感激。
更新:
我得到的例外是:
Cannot parse "19400101": Illegal instant due to time zone offset transition (Africa/Nairobi)
这就是我调用该方法的方式:
if(validationUtils.isDate(propVal, dateFormat) == false) {
String msg = "Not a valid DATE";
Quartet<String, String, String, String> t = new Quartet<String, String, String, String>(recNo, field, propVal, msg);
errors.add(t);
}
包含该isDate
方法的类是一个我使用的 bean @Autowired IValidationUtils validationUtils
。这不是我正在做的唯一验证。其他验证工作成功了,这让我得出结论,问题出在 Joda Time 上。
更新(解决方案):
按照@Ettiene 的建议(在下面的答案中),我找到了解决问题的方法。修改后的工作代码是:
public Boolean isDate(String date, String dateFormat) {
try {
DateTimeFormatter fmt = DateTimeFormat.forPattern(dateFormat);
DateTime dt = fmt.withZone(DateTimeZone.UTC).parseDateTime(date);
} catch(Exception e) {
return false;
}
return true;
}