6

我正在尝试对日期进行验证,该日期应该只需要当前和未来的日期,如果日期是较旧的日期,那么它应该显示

日期早于当前日期

我也想允许当前日期。现在同时将当前日期作为 gievnDate,它总是显示

日期早于当前日期

但我期待输出为

日期是给定日期的未来日期,如今天。

以下是我一直在尝试的代码:

    Date current = new Date();
    String myFormatString = "dd/MM/yy";
    SimpleDateFormat df = new SimpleDateFormat(myFormatString);
    Date givenDate = df.parse("15/02/13");
    Long l = givenDate.getTime();
    //create date object
    Date next = new Date(l);
    //compare both dates
    if(next.after(current) || (next.equals(current))){
        System.out.println("The date is future day");
    } else {

        System.out.println("The date is older than current day");
    }

在这里,当我检查 13 年 2 月 15 日时,它显示为早于当天。我的方法错了吗?或者有没有更好的方法?

4

5 回答 5

9

if(next.after(current) && (next.equals(current)))总是错误的,因为next不能同时严格地在currentAND 等于之后current

你可能的意思是:

if(next.after(current) || (next.equals(current)))与 OR。

于 2013-02-15T10:21:56.010 回答
6
于 2016-10-22T22:04:19.463 回答
3

除了 assylias 指出的逻辑错误:

您没有指定时间,因此givenDate在您的示例中是“15/02/13 00:00:00.000”。现在,如果您将该给定日期与同一天的任何实际时间戳(也称为“现在”)进行比较,那么givenDate几乎总是“旧”然后“现在”。

设置givenDate为当天的最后一毫秒,您将不需要“等于”测试。

于 2013-02-15T10:28:50.353 回答
2

这段代码中至少有一个错误,但我看不出它会如何引发异常。该声明:

if(next.after(current) && (next.equals(current))){

将永远不会评估为true,因为可能next.after(current)并且next.equals(current)不会同时为真。

你可能打算写:

if(next.after(current) || (next.equals(current))){

此外,至少包含错误的具体细节通常是一个好主意:异常在哪一行被抛出(如果这确实是你的意思),以及确切的输出是什么(即使该输出是例外)给出什么输入?

于 2013-02-15T10:25:38.247 回答
-2

尽管这是一个老问题。
我想分享一个简单的解决方案。
您可以检查当前日期是否早于下一个日期。因为如果它不是在它之前等于当前日期或在当前日期之后。这就是你要找的。所以你不需要“或等于”检查。

if(!current.isBefore(next)){
     System.out.println("The date is future day");
}else{
     System.out.println("The date is older than current day");
}

或者,您甚至可以使用:

if(next.getTime() >= current.getTime())
于 2016-02-26T10:40:04.180 回答