如何在java中检查一个日期是否在另一个日期之后?

时间:2014-03-15 13:22:13

标签: java date command-line-arguments

我将两个日期作为命令行参数,并想检查第一个日期是否在第二个日期之后。日期格式为“dd / MM / yyy”。 示例:java dateCheck 01/01/2014 15/03/2014 此外,我还需要检查硬编码到程序中的第三个日期是否在第二个日期之前。

5 个答案:

答案 0 :(得分:4)

try {
    System.out.println("Enter first date : (dd/MM/yyyy)");
    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date date1 = sdf.parse(bufferRead.readLine());
    System.out.println("Enter second date : (dd/MM/yyyy)");
    Date date2 = sdf.parse(bufferRead.readLine());
    System.out.println(date1 + "\n" + date2);
    if (date1.after(date2)) {
        System.out.println("Date1 is after Date2");
    } else {
            System.out.println("Date2 is after Date1");
    }
} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:3)

比较两个日期:

            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");

            Date firstDate = sdf.parse("01/01/2014");
            Date secondDate = sdf.parse("15/03/2014");

            if(firstDate.before(secondDate)){
                System.out.println("firstDate <  secondDate");
            }
            else if(firstDate.after(secondDate)){
                System.out.println("firstDate >  secondDate");
            }
            else if(firstDate.equals(secondDate)){
                System.out.println("firstDate = secondDate");
            }

答案 2 :(得分:1)

使用SimpleDateFormat将字符串转换为Date。

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date1 = sdf.parse("01/01/2017");

Datebeforeafter方法,可以compared to each other如下:

if(todayDate.after(historyDate) && todayDate.before(futureDate)) {
    // In between
}

进行包容性比较:

if(!historyDate.after(todayDate) && !futureDate.before(todayDate)) {
    /* historyDate <= todayDate <= futureDate */ 
}

答案 3 :(得分:1)

TL;博士

LocalDate ld1 = LocalDate.parse( "01/01/2014" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ) ;
LocalDate ld2 = LocalDate.parse( "15/03/2014" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ) ;
LocalDate ld3 = LocalDate.of( 2014 , Month.JULY , 1 ) ;

Boolean isFirstDateBeforeSecondDate = ld1.isBefore( ld2 ) ;
Boolean isThirdDateBeforeSecondDate = ld3.isBefore( ld2 ) ;

Boolean result = ( isFirstDateBeforeSecondDate && isThirdDateBeforeSecondDate ) ;

return result ;

使用java.time

现代方法使用java.time类而不是麻烦的旧遗留日期时间类(DateCalendar等。)。

LocalDate类表示没有时间且没有时区的仅限日期的值。

使用DateTimeFormatter类定义格式化模式以匹配输入字符串。

String input = "15/03/2014" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( input , f );
  

ld.toString():2014-03-15

要指定固定日期,请传递 dayOfMonth 。对于本月,您可以指定一个数字,1月至12月的数字为1-12(与传统课程中疯狂的0-11不同!)。或者您可以选择使用Month枚举对象。

LocalDate firstOf2014 = LocalDate.of( 2014 , Month.JANUARY , 1 );

使用isBeforeisEqualisAfter方法进行比较。

Boolean isInputDateBeforeFixedDate = ld.isBefore( firstOf2014 ) ;
  

isInputDateBeforeFixedDate.toString():false

ISO 8601

如果可能,请使用标准ISO 8601格式替换您的特定日期字符串格式。该标准为日期时间值定义了许多有用的实用的明确字符串格式。

在解析/生成字符串时,java.time类默认使用标准格式。您可以在上面的代码中看到示例。对于仅日期值,标准格式为YYYY-MM-DD。

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 4 :(得分:0)

阅读日期并在之前检查:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");
try {
    Date date1 = sdf.parse(string1);
    Date date2 = sdf.parse(string2);
    if(date1.before(date2)) {
       // do something
    }
} catch(ParseException e) {
    // the format of the read dates is not the expected one
}