我想验证几种日期格式,如下例所示:
YYYY
YYYY-MM
YYYY-MM-DD
验证必须确保日期格式正确且日期存在。
我知道Java 8提供了一个新的Date API,所以我想知道它是否能够完成这样的工作。
有没有更好的方法使用Java 8 date API?将Calendar类与lenient参数一起使用仍然是一个好习惯吗?
发布于 2018-09-27 14:14:09
可以指定缺少的字段parseDefaulting
以使所有格式化工具正常工作:
public static boolean isValid(String input) {
DateTimeFormatter[] formatters = {
new DateTimeFormatterBuilder().appendPattern("yyyy")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter(),
new DateTimeFormatterBuilder().appendPattern("yyyy-MM")
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter(),
new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd")
.parseStrict().toFormatter() };
for(DateTimeFormatter formatter : formatters) {
try {
LocalDate.parse(input, formatter);
return true;
} catch (DateTimeParseException e) {
}
}
return false;
}
发布于 2018-09-27 14:40:12
可以这样试试
public static final boolean validateInputDate(final String isoDate)
{
String[] dateProperties = isoDate.split("-");
if(dateProperties != null)
{
int year = Integer.parseInt(dateProperties[0]);
// A valid month by default in the case it is not provided.
int month = dateProperties.length > 1 ? Integer.parseInt(dateProperties[1]) : 1;
// A valid day by default in the case it is not provided.
int day = dateProperties.length > 2 ? Integer.parseInt(dateProperties[2]) : 1;
try
{
LocalDate.of(year, month, day);
return true;
}
catch(DateTimeException e)
{
return false;
}
}
return false;
}
https://stackoverflow.com/questions/-100002770
复制相似问题