我用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月
任何人都可以帮助逻辑吗?
谢谢!
答案 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()
代替。