是否有一个良好*严格*日期为Java解析器?
题
是否有一个良好的,严的日期为Java解析器?我有机会获得乔达时间,但我还没有看到这个选项。我发现“有一个Java的好日期分析器”的问题,虽然这与它是有点相反的。而这个问题问了一个宽松,更模糊逻辑和容易出现人为错误的解析器,我想一个严格的解析器。例如,与两个JodaTime(据我可以告诉)和SimpleDateFormat的,如果你有一个格式“MM / DD / YYYY”:
解析此:40/40/4353
这成为一个有效的日期。我想那知道40是一个无效的月份和日期的分析器。当然这样一些实现在Java中存在?
解决方案
我不认为这乔达认识到,为有效日期。例如:
strict = org.joda.time.format.DateTimeFormat.forPattern("MM/dd/yyyy")
try {
strict.parseDateTime('40/40/4353')
assert false
} catch (org.joda.time.IllegalFieldValueException e) {
assert 'Cannot parse "40/40/4353": Value 40 for monthOfYear must be in the range [1,12]' == e.message
}
,点击 点击 作为最好的,我可以告诉大家,无论是做日期格式使用 setLenient(假)一>。例如:
try {
df = new java.text.SimpleDateFormat('MM/dd/yyyy')
df.setLenient(false)
df.parse('40/40/4353')
assert false
} catch (java.text.ParseException e) {
assert e.message =~ 'Unparseable'
}
希望这有助于!
其他提示
一个很好的方法做的DateFormat严格验证重新格式化所解析的日期和检查平等于原始字符串:
String myDateString = "87/88/9999";
Date myDate = dateFormat.parse(myDateString);
if (!myDateString.equals(df.format(myDate))){
throw new ParseException();
}
就像一个魅力。
您可以使用apache.commons.validator.routines.DateValidator
验证日期,如果你不想使用SimpleDateFormat
。
示例:
public static Date validateDate(String value, String pattern) {
DateValidator validator = new DateValidator();
Date date = null;
if (pattern!=null) { //Pattern is passed
date = validator.validate(value, pattern);
} else {
date = validator.validate(value);
}
return date;
}
所以,如果返回的无效这意味着该日期是无效的,否则它是一个有效的方法date.This是使用SimpleDateFormat
替代,你不必依靠的例外是抛出,以确定它是否是一个有效的日期或不是。
不隶属于 StackOverflow