我想验证格式的日期YYYY-MM-DD_hh:mm:ss
@Past //validates for a date that is present or past. But what are the formats it accepts
如果那不可能,我想使用@Pattern
. 但是regex
上述格式使用的是@Pattern
什么?
我想验证格式的日期YYYY-MM-DD_hh:mm:ss
@Past //validates for a date that is present or past. But what are the formats it accepts
如果那不可能,我想使用@Pattern
. 但是regex
上述格式使用的是@Pattern
什么?
@Past
Date
仅支持Calendar
但不支持字符串,因此没有日期格式的概念。
您可以创建一个自定义约束,例如@DateFormat
确保给定字符串遵循给定日期格式,约束实现如下:
public class DateFormatValidatorForString
implements ConstraintValidator<DateFormat, String> {
private String format;
public void initialize(DateFormat constraintAnnotation) {
format = constraintAnnotation.value();
}
public boolean isValid(
String date,
ConstraintValidatorContext constraintValidatorContext) {
if ( date == null ) {
return true;
}
DateFormat dateFormat = new SimpleDateFormat( format );
dateFormat.setLenient( false );
try {
dateFormat.parse(date);
return true;
}
catch (ParseException e) {
return false;
}
}
}
Note that the SimpleDateFormat
instance must not be stored in an instance variable of the validator class as it is not thread-safe. Alternatively you could use the FastDateFormat class from the commons-lang project which safely can be accessed from several threads in parallel.
If you wanted to add support for Strings to @Past
you could do so by implementing a validator implementing ConstraintValidator<Past, String>
and registering using an XML constraint mapping. There would be no way to specify the expected format, though. Alternatively you could implement another custom constraint such as @PastWithFormat
.
最好尝试使用 SimpleDateFormat 解析日期
boolean isValid(String date) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'_'HH:mm:ss");
df.setLenient(false);
try {
df.parse(date);
} catch (ParseException e) {
return false;
}
return true;
}