较早的日期我有解析日期下面的代码:乔达时间:异常解析于1970年的
public Boolean isDate(String date, String dateFormat) {
try {
DateTimeFormat.forPattern(dateFormat).parseDateTime(date);
} catch(Exception e) {
return false;
}
return true;
}
这与最近的日期一样20071001
与格式yyyyMMdd
效果很好。但是对于早于1970年的日期,如19600101
与yyyyMMdd
的格式相同,该方法返回false。
任何关于如何解决这个问题的想法将非常感激。
UPDATE:
我得到的例外是:
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
类方法是我用@Autowired IValidationUtils validationUtils
连线的豆子。这不是我正在做的唯一验证。其他验证工作成功了,而且这一点让我得出结论,这个问题与Joda Time有关。
UPDATE(解决方案):
继@ 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;
}
这是因为纪元始于1970年1月1日 – 2013-05-15 12:16:46
这是否意味着我不能使用Joda时间来解析日期早于1970年1月? – okello
@hob那么负数不再存在?如果他40岁,我们不能使用程序来注册某人的出生日期? – SJuan76