我将两个日期作为命令行参数,并想检查第一个日期是否在第二个日期之后。日期格式为“dd / MM / yyy”。 示例:java dateCheck 01/01/2014 15/03/2014 此外,我还需要检查硬编码到程序中的第三个日期是否在第二个日期之前。
答案 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");
Date有before和after方法,可以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)
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类而不是麻烦的旧遗留日期时间类(Date
,Calendar
等。)。
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 );
使用isBefore
,isEqual
或isAfter
方法进行比较。
Boolean isInputDateBeforeFixedDate = ld.isBefore( firstOf2014 ) ;
isInputDateBeforeFixedDate.toString():false
如果可能,请使用标准ISO 8601格式替换您的特定日期字符串格式。该标准为日期时间值定义了许多有用的实用的明确字符串格式。
在解析/生成字符串时,java.time类默认使用标准格式。您可以在上面的代码中看到示例。对于仅日期值,标准格式为YYYY-MM-DD。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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
}