2013-02-06 106 views
-4

我被要求爲一個在其添加完成一年後過期的策略編寫過期方法。我已經寫了這個方法,它增加了一年到它添加的最初日期。Java日期 - 如何編寫「如果日期A晚於日期B」

現在我試着編寫另一個返回布爾值的方法來查看日期A是否過去日期B.如果它過去了,則表示它已過期,所以它將返回true。有人能幫助我解決這個問題,不知道這裏要做什麼。謝謝

public ExpirablePolicy(float a, Date d){ 
    super(a); 
    amount = a; 
    expiryDate = new Date(); 
    GregorianCalendar aCalendar = new GregorianCalendar(); 
    aCalendar.add(Calendar.YEAR,1); 
    expiryDate = aCalendar.getTime(); 
} 

public boolean isExpired(){ 
    //expiry method; 
+9

'Date.before'? 'Date.after'? 'Date.compareTo'?你看過'Date'API文檔嗎?或者搜索諸如「java date comparison」之類的東西? –

+4

看看[Date類的Javadoc](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Date.html),它應該很明顯。 – flup

回答

5

這可以用Date.before()Date.after()完成:

if (d.after(expiryDate)) { ... } 

if (!d.before(expiryDate)) { ... } 

第一個比較評估爲trued嚴格大於expiryDate更大。如果d大於或等於expiryDate,則第二評估爲true

使用Date.compareTo()可以達到同樣的效果。

+0

+1擊敗我:D – Saggio

0

只需使用Date.compareTo(Date)方法:

public boolean isExpired(Date d1, Date d2) { 
    return d1.compareTo(d2) > 0; 
} 
+0

因此,如果d1小於或大於d2,它會過期?這看起來不正確;你能進一步解釋嗎? –

+0

@DaveNewton如果'd1在d2之前compareTo返回一個正數,如果'd1在d2之後'則返回一個數字。請注意,如果第一個表達式爲真,那麼'||'不會計算第二個表達式。 – PermGenError

+1

只有一個條件很重要;爲什麼把這兩個表達?即使這兩個*確實很重要,爲什麼不比較0呢? –

1

試試這個:

public boolean isExpired(Date a, Date b) { 
    return a.before(b); 
}