Java 如何检查日期对象或日历对象是否为有效日期(实际日期)?
Java 如何检查日期对象或日历对象是否为有效日期(实际日期)?,java,date,datetime,java-8,java-time,Java,Date,Datetime,Java 8,Java Time,SimpleDataFormat类的方法: public void setLenient(boolean lenient) 指定是否放宽日期/时间分析。通过宽松的解析,解析器可以使用启发式来解释与该对象格式不完全匹配的输入。通过严格解析,输入必须与此对象的格式匹配 或日历类的方法: public void setLenient(boolean lenient) 指定日期/时间解释是否宽松。在宽大的解释下,“1996年2月942日”等日期将被视为等同于1996年2月1日后的第941天。在严格(
SimpleDataFormat
类的方法:
public void setLenient(boolean lenient)
指定是否放宽日期/时间分析。通过宽松的解析,解析器可以使用启发式来解释与该对象格式不完全匹配的输入。通过严格解析,输入必须与此对象的格式匹配
或日历
类的方法:
public void setLenient(boolean lenient)
指定日期/时间解释是否宽松。在宽大的解释下,“1996年2月942日”等日期将被视为等同于1996年2月1日后的第941天。在严格(不宽容)的解释下,此类日期将导致抛出异常。默认为宽松
检查格式的一致性或日期
我想确认带有MM-DD-YYYY
(2016年2月31日)的日期是否应返回无效,因为2月31日不是真实日期,因此1980年4月31日也应返回无效
不希望使用Java 8中的Joda time API,但是如果您对此有任何建议,我们将不胜感激。使用Java time API,可以使用
解析器样式来完成此操作:
样式严格解析日期和时间
使用严格解析将确保所有解析的值都在字段有效值的外部范围内。个别字段可进一步处理以确保严格性
例如,使用严格模式解析ISO日历系统中的年-月和月-日将确保月-日对年-月有效,拒绝无效值
此代码将抛出一个DateTimeParseException
,因为它不是有效的日期
默认情况下,格式化程序具有ResolverStyle
:
默认情况下,格式化程序具有智能解析器样式
但您可以通过调用formatter实例来更改此设置。getActualMaximum和getActualMinimum可能在Calendar类中有所帮助。为了纠正一个误解:Joda Time不在Java-8中,而是一个独立且非常不同的库。新的java.time包仅受Joda time的启发,是从头开始实现的API@Shekar163在Java 8之前,你必须要么依靠日历,要么使用JoDaTime。确实尝试了日历,但是它不像JoDA时间那么精确,但是我有一个限制不能使用JoDA时间。如果除了JoDA时间API或Java8之外没有其他解决方案,我将被迫使用Java8WELL。升级到java8;)你明白吗?我已经尝试过你建议的解决方案了,谢谢,但这不是我想要的for@Shekar163答案是可以的,因为将模式修改为“MM-dd-yyyy”将为您的输入“02-31-2016”产生假结果(与您的另一个示例“04-31-1980”相同)。所以我不明白你真正的问题是什么。还是你的模式错了???我希望您没有使用“MM-DD-YYYY”@Meno我正在寻找上述java7中的joda Time API替代品或Java8 API替代品解决方案是可以的,但不是我要寻找的,我希望你好好考虑一下,如果解决方案真的那么好,让joda Time API或Java8嵌入joda Time有什么意义吗?@Shekar163如我在其他评论中所说,Java-8不包含Joda时间。尽管使用了一些相同的类名,但这两个库都非常不同。但是,您可能正在寻找Java-8版本6或7平台的新时间库的后端口。这样做,您可以应用与Java-8中相同的代码(在更改了导入语句之后),只有少数例外。
final static String DATE_FORMAT = "dd-MM-yyyy";
public static boolean isDateValid(String date)
{
try {
DateFormat df = new SimpleDateFormat(DATE_FORMAT);
df.setLenient(false);
df.parse(date);
return true;
} catch (ParseException e) {
return false;
}
}
final static String DATE_FORMAT = "dd-MM-yyyy";
public static boolean isDateValid(String date)
{
try {
DateFormat df = new SimpleDateFormat(DATE_FORMAT);
df.setLenient(false);
df.parse(date);
return true;
} catch (ParseException e) {
return false;
}
}