如何在指定的日期范围内找到给定的日期

时间:2015-12-11 05:51:25

标签: java date-format simpledateformat

这是我的代码

mIsCanceled

输入

2015年11月26日
  2015-11-26 - 复制

两者都返回真实但我需要的是" 2015-11-26"应该是真的" 2015-11-26 - 复制"应该是假的。

4 个答案:

答案 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;
}