2014-12-04 67 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會告訴你更小或更大,而不是大小。