这是我的代码
mIsCanceled
输入
2015年11月26日
2015-11-26 - 复制
两者都返回真实但我需要的是" 2015-11-26"应该是真的" 2015-11-26 - 复制"应该是假的。
答案 0 :(得分:4)
这是因为SimpleDateFormat愉快地解析“2015-11-26”而忽略了“ - 复制”部分。
javadoc州:
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。
要检测是否已使用整个字符串,请使用parse(String source, ParsePosition pos)
方法。 ParsePosition告诉您解析停止的位置。只需将其与原始日期字符串的长度进行比较。
答案 1 :(得分:1)
这里的问题是我们正在传递日期格式' yyyy-MM-dd'。这将验证给定输入达到此格式。
例如,
static boolean isWithinRange(String d)
{
boolean withinDate = false;
try
{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = dateFormat.parse(d);
withinDate = !(date.before(startDate) || date.after(endDate));
}
catch (ParseException parseException)
{
parseException.printStackTrace();
}
return withinDate;
}
上面的代码抛出异常,因为我们将日期格式传递为' yyyy-MM-dd hh:mm:ss'。所以这会找到小时分和秒
答案 2 :(得分:0)
在测试之前测试大小是否为10:
if (d.length!10) return false;
答案 3 :(得分:-1)
public static void main(String[] args) {
isWithinRange("2015-12-11 - Copy");
isWithinRange("2015-12-11");
}
public static boolean isWithinRange(String d) {
boolean withinDate = false;
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dd = d.indexOf(" ") !=-1 ? d.substring(0, d.indexOf(" ")) : d; // Find valid String
if(d.equals(dd)){
Date date = dateFormat.parse(d);
withinDate = !(date.before(startDate)) || date.after(endDate)));
}else{
withinDate =false;
}
} catch (ParseException parseException) {
}
return withinDate;
}