2011-01-26 80 views
0

我開發了Java中的日曆小部件(專門用於BlackBerry開發)。用戶可以查看當前月份的所有日期,以及以月/年的方式向前/向後移動。Java幫助比較日曆對象

當我繪製日曆(以表格格式)時,我想更改當前日期前X天的任何天數的顏色。我現在可以檢查這僅在屏幕上顯示的日曆是同月爲當月:

if (calendarMonth == currentMonth) { 
     for (int i = 1; i <= (NUM_DAYS_IN_MONTH); i++) { 
      if (i > currentDay + Constants.CALENDAR_DAYS_IN_ADVANCE) { 
       System.out.println("VALID: " + i); 
      } 
     } 
    } 

但我無法編碼時所顯示的日曆是一個不同的月份,從當前的解決方案月。例如,今天是1月26日,因此1月日曆將顯示所有1月份的日子爲灰色。當用戶改變月至2月,然後在接下來的幾天應該是灰色的:

Constants.CALENDAR_DAYS_IN_ADVANCE = 14; 
1/26/2011 - 2/9/2011 

過去的這個範圍內的任何日子將是一個黑色的顏色。所以基本上,我正在尋找編寫一個函數來接受兩個java.util.Calendar對象(顯示的活動日曆和當前日期的日曆),該函數將返回CURRENT DATE - CALENDAR_DAYS_IN_ADVANCE。

我還需要牢記以下幾點:

1)我不能比較與java.util.Calendar.add()或java.util.Calendar.subtract日期()函數,如Java爲黑莓是有限

2)這一做法在幾年的工作也一樣,例如十二月2010 - 2011年1月

任何人能與邏輯幫助嗎?

謝謝!

+0

新增backberry標籤設置月份,爲什麼你做了monthOfYear-1時 – adrianboimvaser 2011-01-26 20:09:41

+0

? – ghy 2011-07-14 04:43:37

回答

2

比方說,您有2個Calendar實例:nowCal指向您的開始日期的00:00:00,並且maxOffsetCal指向您的結束日期的23:59:59。 下面的代碼將打印所需的日期:

public class Test { 
    private final static long MILLIS_IN_DAY = 86400 * 1000; 

    public static void main(String[] args) { 
     Calendar nowCal = new GregorianCalendar(); 
     setTime(nowCal, 29, 1, 2011, 0, 0, 0); 
     Calendar maxOffsetCal = new GregorianCalendar(); 
     setTime(maxOffsetCal, 2, 2, 2011, 23, 59, 59); 
     long now = nowCal.getTimeInMillis(), endTime = maxOffsetCal.getTimeInMillis(); 
     for (; now < endTime; now += MILLIS_IN_DAY) { 
      System.out.println(new Date(now)); 
     } 
    } 

    private static void setTime(Calendar c, int dayOfMonth, int monthOfYear, int year, 
            int hourOfDay, int minute, int second) { 
     c.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
     c.set(Calendar.MONTH, monthOfYear - 1); 
     c.set(Calendar.YEAR, year); 
     c.set(Calendar.HOUR_OF_DAY, hourOfDay); 
     c.set(Calendar.MINUTE, minute); 
     c.set(Calendar.SECOND, second); 
     c.set(Calendar.MILLISECOND, 0); 
    } 
} 
0

if(calendarMonth == currentMonth)

是錯誤的。切勿使用==比較對象。運算符==比較引用,所以只有在處理相同的對象而不是不同的相等對象時纔是真實的。您應該使用方法equals()

+1

在這種情況下,我會使用==。 calendarMonth和currentMonth都是原始類型int – littleK 2011-01-26 20:28:37