幫助

2011-03-18 131 views
2

我用Java日曆類工作做到以下幾點Java日曆邏輯:幫助

  1. 設定開始日期
  2. 設定結束日期
  3. 該範圍內的任何日期是「有效「日期

我有這個有點工作,有些不是。請參閱下面的代碼:

nowCalendar.set(Calendar.DATE, nowCalendar.get(Calendar.DATE) + offset); 
    int nowDay = nowCalendar.get(Calendar.DATE); 

    Calendar futureCalendar = Calendar.getInstance(); 
    futureCalendar.set(Calendar.DATE, nowDay + days); 

    Date now = nowCalendar.getTime(); 
    Date endTime = futureCalendar.getTime(); 

    long now_ms = now.getTime(); 
    long endTime_ms = endTime.getTime(); 

    for (; now_ms < endTime_ms; now_ms += MILLIS_IN_DAY) { 
     valid_days.addElement(new Date(now_ms)); 
     System.out.println("VALID DAY: " + new Date(now_ms)); 
    } 

基本上,我設置了「NOW」日曆和「未來」的日曆,然後我比較兩個日曆找到有效天數。在我的日曆上,有效日期將以白色陰影顯示,無效日期以灰色陰影顯示。你會發現兩個變量:

offset = three days after the current selected date 
    days = the number of valid days from the current selected date 

這個工程......除了噹噹前選定的日期是本月的最後一天,兩天之前(三級一起)。我認爲它的抵消肯定是搞砸了,但邏輯在其他地方起作用。有任何想法嗎?

回答

2

不要擺弄毫秒。克隆nowCalendar,使用Calendar#add()在一個循環中添加1天,只要它不超過futureCalendar,並使用Calendar#getTime()futureCalendar中獲取Date

Calendar clone = nowCalendar.clone(); 

while (!clone.after(futureCalendar)) { 
    validDays.add(clone.getTime()); 
    clone.add(Calendar.DATE, 1); 
} 

(請注意,我改進validDays是的List代替傳統Vector

+0

BalusC-我沒有實現你的解決方案(這是一個更清潔,謝謝),但我仍然擊中我原來的問題。在選擇我的任何日曆日期之前,NOW日曆是:2011年3月18日,而未來日曆是2011年3月31日。在選擇了本​​月最後三天之一後,NOW日曆將變爲2011年4月3日,而FUTURE日曆將變爲2011年4月2日。 – littleK 2011-03-18 19:44:53

+0

得到它的工作 - 謝謝。毫無疑問你毫無疑問是毫無疑問的。 – littleK 2011-03-18 20:04:02

+0

不客氣。 – BalusC 2012-01-27 21:02:48

1
public boolean isInRange(Date d) 
{ 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(d); 
    return cal.after(startCal) && cal.before(endCal); 
} 

這裏startCal是開始時間的日曆實例,endCal是結束時間。

2

使用add,而不是set在第一線,否則,如果你在這個月不調整一個月邊界:

nowCalendar.add(Calendar.DATE, offset); 
+0

問題是我的應用程序是爲BlackBerry,它只包含Java的一個子集。因此,我可以使用set()方法,但不能使用add()方法... – littleK 2011-03-18 19:21:26

1

我發現這個問題:

只要我將futureCalendar設置爲nowCalendar的副本(加上額外的日子),它就開始工作。感謝大家的建議!