有人可以向我解释如何使用以下方法为显示的输入返回值false
吗?它正在返回true
,这是我不期望的。
isDateValid("19/06/2012 5:00, 21:00","dd/MM/yyyy HH:mm")
我认为这应该返回false
,但显然Java并不这么认为。提供的实际日期字符串最后包含这些额外字符:", 21:00"
。
public static boolean isDateValid(String date, String dateFormat)
{
try {
DateFormat df = new SimpleDateFormat(dateFormat);
df.setLenient(false);
Date newDate = df.parse(date);
System.out.println("Date value after checking for validity: " + newDate);
return true;
} catch (ParseException e) {
return false;
}
}
答案 0 :(得分:7)
parse
不一定使用整个String
。这在the Javadoc非常清楚,强调我的:
parse
public Date parse(String source) throws ParseException
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。 有关日期解析的更多信息,请参阅
parse(String, ParsePosition)
方法。
您可以使用parse(String text, ParsePosition pos)
检测字符串末尾是否有额外的字符。如果pos
不等于字符串的结尾,那么最后还会留下额外的字符。
这是一个包含测试装备的工作程序,可以按照您的方式正确检查。在这个程序中,如果pos.getIndex()
根本无法解析,则0
将是public class DateFormatTest {
public static void main(String[] args) {
// should be false
System.out.println(isDateValid("19/06/2012 5:00, 21:00", "dd/MM/yyyy HH:mm"));
System.out.println(isDateValid("19/06/201", "dd/MM/yyyy HH:mm"));
System.out.println();
// should be true
System.out.println(isDateValid("19/06/2012 5:00", "dd/MM/yyyy HH:mm"));
}
public static boolean isDateValid(String date, String dateFormat) {
ParsePosition pos = new ParsePosition(0);
DateFormat df = new SimpleDateFormat(dateFormat);
df.setLenient(false);
df.parse(date, pos);
return pos.getIndex() == date.length();
}
}
,如果最后有额外的字符,则数字太小,如果它按照您想要的方式工作则相等/ p>
Str strTopLeftCellIdentifier = "Account No"