2013-10-01 172 views
46

我正在研究一个Java应用程序,该应用程序会在命令行中为用户输入的持续时间生成报告。用户需要按以下格式输入日期:DD-MM-YYYY如何在Java中检查日期是否大于另一日期?

> java report startDate endDate

例子:

Java报表2013年1月1日31-03-2013

在代码中,我将日期保存在两个字符串中。我必须确保用户输入的开始日期应该早于结束日期。 是否有一个内置函数可以帮助我通过将这两个字符串传递给它来实现此目的?

+2

将字符串转换为java.util.Date。 Date实现Comparable。 – PeterMmm

+0

更新:java.time类取代了诸如Date和Calendar之类的麻烦的旧式遗留日期时间类。 –

回答

84

您可以使用Date.before()Date.after()Date.equals()进行日期比较。

here摘自:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateDiff { 

    public static void main(String[] args) 
    { 
     compareDates("2017-01-13 00:00:00", "2017-01-14 00:00:00");// output will be Date1 is before Date2 
     compareDates("2017-01-13 00:00:00", "2017-01-12 00:00:00");//output will be Date1 is after Date2 
     compareDates("2017-01-13 00:00:00", "2017-01-13 10:20:30");//output will be Date1 is before Date2 because date2 is ahead of date 1 by 10:20:30 hours 
     compareDates("2017-01-13 00:00:00", "2017-01-13 00:00:00");//output will be Date1 is equal Date2 because both date and time are equal 
    } 

    public static void compareDates(String d1,String d2) 
    { 
     try{ 
      // If you already have date objects then skip 1 

      //1 
      // Create 2 dates starts 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      Date date1 = sdf.parse(d1); 
      Date date2 = sdf.parse(d2); 

      System.out.println("Date1"+sdf.format(date1)); 
      System.out.println("Date2"+sdf.format(date2));System.out.println(); 

      // Create 2 dates ends 
      //1 

      // Date object is having 3 methods namely after,before and equals for comparing 
      // after() will return true if and only if date1 is after date 2 
      if(date1.after(date2)){ 
       System.out.println("Date1 is after Date2"); 
      } 
      // before() will return true if and only if date1 is before date2 
      if(date1.before(date2)){ 
       System.out.println("Date1 is before Date2"); 
      } 

      //equals() returns true if both the dates are equal 
      if(date1.equals(date2)){ 
       System.out.println("Date1 is equal Date2"); 
      } 

      System.out.println(); 
     } 
     catch(ParseException ex){ 
      ex.printStackTrace(); 
     } 
    } 

    public static void compareDates(Date date1,Date date2) 
    { 
     // if you already have date objects then skip 1 
     //1 

     //1 

     //date object is having 3 methods namely after,before and equals for comparing 
     //after() will return true if and only if date1 is after date 2 
     if(date1.after(date2)){ 
      System.out.println("Date1 is after Date2"); 
     } 

     //before() will return true if and only if date1 is before date2 
     if(date1.before(date2)){ 
      System.out.println("Date1 is before Date2"); 
     } 

     //equals() returns true if both the dates are equal 
     if(date1.equals(date2)){ 
      System.out.println("Date1 is equal Date2"); 
     } 

     System.out.println(); 
    } 
} 
9

解析firstDatesecondDate使用SimpleDateFormat两个日期。

firstDate.after(secondDate);

firstDate.before(secondDate);

8

解析字符串为日期,然后比较使用

Date d = new Date(); 
d.compareTo(anotherDate) 
compareTobefore或之后

Date date1 = new SimpleDateFormat("MM/dd/yyyy").parse(date1string) 
Date date2 = new SimpleDateFormat("MM/dd/yyyy").parse(date2string) 

date1.compareTo(date2); 

的javadoc的compareTo http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#compareTo(java.util.Date)

+2

如果参数Date等于此日期,则返回值0;如果此日期在Date参数之前,则值小于0;并且如果此Date在Date参数之后,则该值大于0. [和NullPointerException - 如果anotherDate为null。 –

相关问题