Java帮助比较Calendar对象

时间:2011-01-26 19:57:29

标签: java object blackberry calendar compare

我用Java开发了一个Calendar小部件(特别是用于BlackBerry开发)。用户可以查看当月的所有日期,也可以查看数月/年的前进/后退。

当我绘制我的日历(以表格格式)时,我想要更改当前日期前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()函数进行比较,因为用于BlackBerry的java是有限的

2)这也需要多年,例如2010年12月 - 2011年1月

任何人都可以帮助逻辑吗?

谢谢!

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

if(calendarMonth == currentMonth)

错了。切勿使用==来比较对象。运算符==比较引用,因此只有处理相同的对象但不处理不同的对象时才会成立。您应该使用方法equals()代替。