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

如何在java中检查一个日期是否在另一个日期之后?,java,date,command-line-arguments,Java,Date,Command Line Arguments,我将两个日期作为命令行参数,并希望检查第一个日期是否在第二个日期之后。日期的格式为“dd/MM/yyy”。 示例:java dateCheck 01/01/2014 15/03/2014 此外,我还需要检查硬编码到程序中的第三个日期是否在第二个日期之前。要读取日期并在之前检查: SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy"); try { Date date1 = sdf.parse(string1); Date

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

要读取日期并在之前检查:

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
}
比较两个日期:

            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");
            }
SimpleDataFormat sdf=新的SimpleDataFormat(“dd/MM/yyy”);
Date firstDate=sdf.parse(“2014年1月1日”);
日期secondDate=sdf.parse(“2014年3月15日”);
如果(第一个日期之前,第二个日期)){
System.out.println(“第一个日期<第二个日期”);
}
否则,如果(第一个日期之后,第二个日期)){
System.out.println(“第一个日期>第二个日期”);
}
else if(firstDate.equals(secondDate)){
System.out.println(“firstDate=secondDate”);
}

使用SimpleDataFormat将字符串转换为日期

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date1 = sdf.parse("01/01/2017");
具有以下功能和方法:

if(todayDate.after(historyDate) && todayDate.before(futureDate)) {
    // In between
}
对于包容性比较:

if(!historyDate.after(todayDate) && !futureDate.before(todayDate)) {
    /* historyDate <= todayDate <= futureDate */ 
}
if(!historyDate.after(todayDate)和&!futureDate.before(todayDate)){
/*历史日期太长了,读不下去了。
使用java.time
现代方法使用java.time类,而不是麻烦的旧遗留日期时间类(
date
Calendar
,等等)

该类表示一个仅限日期的值,不包含一天中的时间和时区

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

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

要指定固定日期,请通过year、month和dayOfMonth。对于月份,您可以指定一个编号,编号为1-12(与传统类中疯狂的0-11不同!)。或者您可以选择使用枚举对象

LocalDate firstOf2014 = LocalDate.of( 2014 , Month.JANUARY , 1 );
使用
isBefore
isEqual
isAfter
方法进行比较

Boolean isInputDateBeforeFixedDate = ld.isBefore( firstOf2014 ) ;
isInputDateBeforeFixedDate.toString():false

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

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


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如、、。

您有任何代码来显示您迄今为止的尝试吗?
Date
的javadoc会向您显示1。它实现了
Comparable
和2.它有
.before()
.before()
方法可能重复您的意思是使用四个“y”字符吗?因此,“dd/MM/yyyy”而不是“dd/MM/yyyy”?(a)您的格式设置模式不适合您的示例数据。三个“y”字符而不是四个,斜杠而不是句号。(b)仅供参考,诸如、和
java.text.SimpleTextFormat
等麻烦的旧日期时间类现在已被这些类取代。
LocalDate firstOf2014 = LocalDate.of( 2014 , Month.JANUARY , 1 );
Boolean isInputDateBeforeFixedDate = ld.isBefore( firstOf2014 ) ;