Java 如何查找指定日期范围内的给定日期

Java 如何查找指定日期范围内的给定日期,java,date-format,simpledateformat,Java,Date Format,Simpledateformat,这是我的密码 boolean isWithinRange(String d) { boolean withinDate = false; try { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = dateFormat.parse(d); withinDate = !(date.before(startDate) || da

这是我的密码

boolean isWithinRange(String d)
{
    boolean withinDate = false;   
    try
    {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dateFormat.parse(d);
        withinDate = !(date.before(startDate) || date.after(endDate));
    }
    catch (ParseException parseException)
    {
     }
    return withinDate;
}
投入

2015-11-26
2015-11-26-副本

返回true,但我需要的是“2015-11-26”应该为true,“2015-11-26-副本”应该为false。

这是因为高兴地解析“2015-11-26”并忽略“-Copy”部分

各国:

解析给定字符串开头的文本以生成日期。 该方法不能使用给定字符串的整个文本

要检测整个字符串是否已被使用,请改用方法。ParsePosition告诉您解析停止的位置。只需将其与原始日期字符串的长度进行比较。

这是因为愉快地解析“2015-11-26”并忽略“-Copy”部分

各国:

解析给定字符串开头的文本以生成日期。 该方法不能使用给定字符串的整个文本


要检测整个字符串是否已被使用,请改用方法。ParsePosition告诉您解析停止的位置。只需将其与原始日期字符串的长度进行比较。

这里的问题是我们正在传递日期格式“yyy-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”。因此,这将查找小时、分钟和秒

这里的问题是我们正在传递日期格式“yyyy-MM-dd”。这将验证此格式的给定输入

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;
}
比如说,

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”。因此,这将找到小时分和秒数,只需在测试前测试大小是否为10:

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;
}
if (d.length!10) return false;

测试前,只需测试尺寸是否为10:

if (d.length!10) return false;

解析前是否需要修剪日期字符串?。是否有其他方法不修剪日期字符串。是否需要在解析之前修剪日期字符串?。是否有其他不修剪日期字符串的方法。只有当
d
的第一个字符不是日期的一部分时,这种方法才有效。对于类似于
2015-12-11-Copy
的内容,这仍将返回
true
。用户需要注意第一个空格,但他/她对此感到困惑,请修剪()输入字符串的前导空格和后导空格。您将找到trim()[只有当
d
的第一个字符中有一个空格不是日期的一部分时,这才有效。对于
2015-12-11-Copy
之类的内容,这仍然会返回
true
。用户需要注意第一个空格,但他/她会混淆它,trim()输入字符串的前导空格和后导空格。您会发现trim()[