比较Java中的两个日期

时间:2014-12-04 17:17:26

标签: java date

我有一个Identity类,带有必要的访问器和mutator。

在单独的程序中,我将身份日期与今天的日期进行比较,该日期始终返回<= 10。然而,当我去打印时,无论日期是什么,我都得到相同的结果。是否有不同的方式来访问正确的日期?

我需要获得两个日期之间的天数,而我在格式化方面遇到了麻烦:

Date today = new Date();
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

        Date a = df.parse("06/18/2015");
        Date b = df.parse("01/04/2015");
        Date c = df.parse("02/04/2015"); 
        Date d = df.parse("03/04/2015"); 
        Date e = df.parse("07/04/2015"); 
if(a.compareTo(today) == 30{
//do stuff
}

我尝试了多种方法无济于事。

3 个答案:

答案 0 :(得分:1)

您的代码中有两个错误:

  1. compareTo()仅在日期相同时返回0,如果日期在参数之后则返回正值,如果在之前,则返回负值。它不会返回两个日期之间的差异。为了得到差异你可以写:

    today.getTime() - expiration.getTime()

    获取两个日期之间的毫秒数,然后将其与以毫秒为单位转换的10天进行比较。

  2. 您没有正确初始化日期:Date a = new Date(06/18/2015);无法正常工作。 它应该创建一个以毫秒为参数的新Date。因此,您的代码将按6除以18,到2015年获得数毫秒...您可以使用:

    Date a = new GregorianCalendar(2015, 06, 18).getTime();

  3. 今天有一种更简单的方法:Date today = new Date();

答案 1 :(得分:0)

您正在执行整数除法,而不是调用您认为的Date构造函数。

Date a = new Date(06/18/2015);

使用DateFormat之类的

public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    try {
        Date a = df.parse("06/18/2015");
        System.out.println("1. " + a);
        System.out.println("2. " + df.format(a));
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

注意 Date是即时的,因此它的默认文字表示可能与您的预期不同。请参阅下面第1行和第2行的差异,

1. Thu Jun 18 00:00:00 EDT 2015
2. 06/18/2015

最后,您需要计算difference between two datescompareTo会告诉你更小或更大,而不是规模。

答案 2 :(得分:0)

我创建了一个接收两个日期的方法,转换它们并返回一个工作正常的long。 86400000是一天中的毫秒数。我使用GregorianCalendar格式

public long compareDates(Date exp, Date today){

         return (exp.getTime()-today.getTime())/86400000;
    }