用戶輸入的日期正在使用一個下拉菜單分別爲日,月和年。我必須比較用戶輸入的日期和今天的日期,並檢查它是同一天還是未來的日子。我對時間部分有點困惑,因爲我對時間不感興趣,只是日期。如何解決這個問題,而不使用Date類(我讀它不建議使用Date類)。使用日曆類使用java比較日期
謝謝。
用戶輸入的日期正在使用一個下拉菜單分別爲日,月和年。我必須比較用戶輸入的日期和今天的日期,並檢查它是同一天還是未來的日子。我對時間部分有點困惑,因爲我對時間不感興趣,只是日期。如何解決這個問題,而不使用Date類(我讀它不建議使用Date類)。使用日曆類使用java比較日期
謝謝。
您首先需要創建GregorianCalendar
實例表示輸入的日期:
Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17);
,一個針對「現在」:
Calendar now = new GregorianCalendar();
這將產生積極的價值,如果日期是在未來的和消極的 - 如果過去:
user.compareTo(now);
關於構造的幾點注意事項user
對象:
+1有趣的是,我不知道compareTo會這麼做。好的答案! – ChadNC
試試這個解決方案:
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
使用公曆。 如果您想了解兩個日期之間的天數差異,則可以製作類似於以下內容的方法。
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;
}
,將返回你的天數之差。
嘗試庫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
}
簡單計算:
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
的可能重複[對比Java中兩個日期] (HTTP://計算器。com/questions/3144387/compare-two-dates-in-java) – Andrew