2011-01-26 162 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