2014-12-04 155 views
0

我有一个Identity类,有必要的访问器和增变器。比较Java中的两个日期

在一个单独的程序中,我将身份的日期与总是返回<= 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 
} 

我试过多种方法都无济于事。

+0

'compareTo'的javadoc说什么? – 2014-12-04 17:19:42

+0

@SotiriosDelimanolis返回: 值0如果参数Date等于这个Date;如果此日期在Date参数之前,则值小于0;如果此Date在Date参数之后,则值大于0。 - 对我来说,这将返回它们之间的差异,但我可能是错的 – BarryDale2014 2014-12-04 17:21:41

+3

它说0,更大或更小。这与两个日期之间的差异并不相同。 – 2014-12-04 17:25:56

回答

0

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

public long compareDates(Date exp, Date today){ 

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

我不确定要了解您要做什么。为什么在转换前为什么在每个日期减去一天?如果你的目标是获得两个日期之间的天数,你可以简单地写:'返回Maths.abs(exp.getTime() - today.getTime())/ 86400000'('Math.abs'在这里总是返回一个正值,因为这个差值可能是负值) – 2014-12-04 23:23:42

+0

@JulienR这就是我没有'Math.abs.'的结果,如果确实存在一个负值,则会执行一个单独的函数 – BarryDale2014 2014-12-10 19:03:41

1

你在你的代码的两个错误:

  1. compareTo()如果日期的说法,或负值后,如果是以前只会返回0,如果日期是相同的,正值。它不会返回两个日期之间的差异。要获得差异,你可以写:

    today.getTime() - expiration.getTime()

    得到两个日期之间的毫秒数,然后比较10天以毫秒为单位转换。

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

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

  3. 你有一个更简单的方式来获得今天:Date today = new Date();

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会告诉你更小或更大,而不是大小。