日付を解析するための次のコードがあります。
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;
}