2012-05-16 40 views
0

用戶輸入的日期正在使用一個下拉菜單分別爲日,月和年。我必須比較用戶輸入的日期和今天的日期,並檢查它是同一天還是未來的日子。我對時間部分有點困惑,因爲我對時間不感興趣,只是日期。如何解決這個問題,而不使用Date類(我讀它不建議使用Date類)。使用日曆類使用java比較日期

謝謝。

+1

的可能重複[對比Java中兩個日期] (HTTP://計算器。com/questions/3144387/compare-two-dates-in-java) – Andrew

回答

6

您首先需要創建GregorianCalendar實例表示輸入的日期:

Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17); 

,一個針對「現在」:

Calendar now = new GregorianCalendar(); 

這將產生積極的價值,如果日期是在未來的和消極的 - 如果過去:

user.compareTo(now); 

關於構造的幾點注意事項user對象:

  • 它CEST時區使用當前JVM的時區,所以在我的情況下,它是午夜,5月17日的
  • 小心幾個月,他們是從0
+0

+1有趣的是,我不知道compareTo會這麼做。好的答案! – ChadNC

0

試試這個解決方案:

int day = 0; //user provided 
    int month = 0; //user provided 
    int year = 0; //user provided 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.YEAR, year); 
    calendar.set(Calendar.MONDAY, month); 
    calendar.set(Calendar.DAY_OF_MONTH, day); 
    long millisUser = calendar.getTime().getTime(); 
    long nowMillis = System.currentTimeMillis(); 
    if(nowMillis < millisUser) { 
     ... 
    } 

上面是檢查日期是否在將來。

沒有什麼錯在使用java.util.Date 您可以使用:

int day = 0; //user provided 
    int month = 0; //user provided 
    int year = 0; //user provided 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.YEAR, year); 
    calendar.set(Calendar.MONDAY, month); 
    calendar.set(Calendar.DAY_OF_MONTH, day); 
    Date userSubmit = calendar.getTime(); 
    Date now = new Date(); 
    if(userSubmit.after(now)) { 
     ... 
    } 

但是如果你想流暢,簡單而直觀的API的日期,我建議使用JodaTime

0

使用公曆。 如果您想了解兩個日期之間的天數差異,則可以製作類似於以下內容的方法。

public int getDays(GregorianCalendar g1, GregorianCalendar g2) { 
    int elapsed = 0; 
    GregorianCalendar gc1, gc2; 
    if (g2.after(g1)) { 
    gc2 = (GregorianCalendar) g2.clone(); 
    gc1 = (GregorianCalendar) g1.clone(); 
    } 
    else { 
    gc2 = (GregorianCalendar) g1.clone(); 
    gc1 = (GregorianCalendar) g2.clone(); 
    } 
    gc1.clear(Calendar.MILLISECOND); 
    gc1.clear(Calendar.SECOND); 
    gc1.clear(Calendar.MINUTE); 
    gc1.clear(Calendar.HOUR_OF_DAY); 
    gc2.clear(Calendar.MILLISECOND); 
    gc2.clear(Calendar.SECOND); 
    gc2.clear(Calendar.MINUTE); 
    gc2.clear(Calendar.HOUR_OF_DAY); 
    while (gc1.before(gc2)) { 
    gc1.add(Calendar.DATE, 1); 
    elapsed++; 
    } 
    return elapsed; 

}

,將返回你的天數之差。

2

嘗試庫Apache Commons Lang的類DateUtils。

此類提供truncatedEquals(cal1,cal2,field)方法。

所以,你可以用一行代碼檢查等式:

Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17); 
Calendar now = Calendar.getInstance(); 

if(DateUtils.truncatedEquals(user, now, Calendar.DATE)){ 
    // your code goes here 
} 
1

簡單計算:

GregorianCalendar gc1 = new GregorianCalendar(); 
GregorianCalendar gc2 = new GregorianCalendar(); 
gc2.add(GregorianCalendar.DAY_OF_MONTH, 2); // gc2 is 2 days after gc1 
long duration = (gc2.getTimeInMillis() - gc1.getTimeInMillis()) 
         /(1000 * 60 * 60 * 24) ; 
System.out.println(duration); 

- > 2