[英]How do I validate a date using split method of String?
如何使用字符串类的split方法验证日期(我的意思是该日期不应无效)? 进一步的详细信息:每个月应有各自的日期,而2月仅在when年且日期不能超过当前日期时才应有29天。
我可以建议使用Apache Commons DateValidator中的 validate(String value)方法:
import org.apache.commons.validator.routines.DateValidator;
...
// Get the Date validator
DateValidator validator = DateValidator.getInstance();
// Validate/Convert the date
Date fooDate = validator.validate(fooString);
if (fooDate == null) {
// error...not a valid date
return;
}
validate()如果有效,则返回已解析的Date;如果无效,则返回null。
如果只想得到true / false,那么还有另一个布尔方法isValid() 。 例如:
DateValidator validator = DateValidator.getInstance();
if (validator.isValid(date)) {
System.out.println(date + " is valid");
} else {
System.out.println(date + " is invalid");
}
在JDK中,您具有SimpleDateFormat
来处理这种事情。
例如,要验证一个小时:
final DateFormat fmt = new SimpleDateFormat("HH:mm");
然后,您可以尝试解析:
fmt.parse(input);
如果日期无效,它将抛出ParseException
。
当然,可以使用许多其他格式。
对于外部库,如果您必须/想要使用一个,那么实际上只需要考虑一个: Joda Time 。 它是如此出色,以至于Java 8的新日期API受到了90%以上的启发。
注意:JDK和Joda Time的解析器将从当前时间的某个日期中导出缺少的组件; 这意味着,如果您尝试在2015年解析包含Feb 29
日的字符串,它将失败。但是由于it年,它将在2016年成功!
convert string to date format, and this is easy for validating
public class DateUtil {
// List of all date formats that we want to parse.
// Add your own format here.
//u can use anyone format
private static List<SimpleDateFormat>;
dateFormats = new ArrayList<SimpleDateFormat>() {{
add(new SimpleDateFormat("M/dd/yyyy"));
add(new SimpleDateFormat("dd.M.yyyy"));
add(new SimpleDateFormat("dd.M.yyyy hh:mm:ss a"));
add(new SimpleDateFormat("dd.MMM.yyyy"));
add(new SimpleDateFormat("dd-MMM-yyyy"));
}
};
/**
* Convert String with various formats into java.util.Date
*
* @param input
* Date as a string
* @return java.util.Date object if input string is parsed
* successfully else returns null
*/
public static Date convertToDate(String input) {
Date date = null;
if(null == input) {
return null;
}
for (SimpleDateFormat format : dateFormats) {
try {
format.setLenient(false);
date = format.parse(input);
} catch (ParseException e) {
//Shhh.. try other formats
}
if (date != null) {
break;
}
}
return date;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.