gpt4 book ai didi

Java 帮助比较 Calendar 对象

转载 作者:行者123 更新时间:2023-12-02 08:24:29 25 4
gpt4 key购买 nike

我用 Java 开发了一个日历小部件(特别是用于 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 月的所有日期显示为灰色。当用户将月份更改为二月时,以下日期应为灰色:

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

超过该范围的任何天都将显示为黑色。所以基本上,我希望编写一个函数,它将接受两个 java.util.Calendar 对象(显示的 Activity 日历和当前日期的日历),并且该函数将返回 CURRENT DATE 范围内的日期数组 - CALENDAR_DAYS_IN_ADVANCE。

我还需要记住以下几点:

1) 我无法将日期与 java.util.Calendar.add() 或 java.util.Calendar.subtract() 函数进行比较,因为 BlackBerry 的 java 受到限制

2) 这也必须跨年有效,例如 2010 年 12 月 - 2011 年 1 月

谁能帮忙解释一下逻辑吗?

谢谢!

最佳答案

假设您有 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);
}
}

关于Java 帮助比较 Calendar 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com