无法比较日期

Trouble comparing dates

如果给定的日期是今天或明天,我应该打印一条消息的以下代码有问题:

if (dayOfMonth >= Calendar.DAY_OF_MONTH){
     System.out.printl("Is today or tomorrow");
}

如果 dayOfMonth 大于或等于今天的日期,则打印消息。但是,条件总是 returns false。我发现 Calendar.DAY_OF_MONTH returns 5,但我不知道为什么。

今天是 14-03-2015,所以 dayOfMonth 应该是 14。

Calendar.DAY_OF_MONTH 不代表一个月中的第几天,它是一个常量值,用于 检索 一个月中的第几天 :

Calendar calendar = Calendar.getInstance();
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);

顺便说一句,当明天是下个月的第一天时,您检查日期是今天还是明天的代码不起作用(因为 calendar.get(Calendar.DAY_OF_MONTH) 将 return 1)。您还需要当前月份来确定给定日期是同一天还是第二天。

Calendar calendar = Calendar.getInstance();
if (month == calendar.get(Calendar.MONTH) && 
    dayOfMonth == calendar.get(Calendar.DAY_OF_MONTH)) {
    //day is today
} else {
    calendar.add(Calendar.DAY_OF_MONTH, 1);
    if (month + 1 == calendar.get(Calendar.MONTH) && dayOfMonth == 1 ||
        month == calendar.get(Calendar.MONTH) && dayOfMonth + 1 == calendar.get(Calendar.DAY_OF_MONTH)) {
        //day is tomorrow
    }
}

使用 Java 8,这可以简化为(其中 myDateLocalDate

LocalDate tomorrow = LocalDate.now().addDays(1);
if (Duration.between(myDate.atTime(0, 0), tomorrow.atTime(0, 0)).toDays() <= 1) {
    //is today or tomorrow
}

Calendar.DAY_OF_MONTH 是您可以在 [=16] 中使用的众多 calendar fieldsCalendar.YEARCalendar.WEEK_OF_YEARCalendar.DAY_OF_WEEK_IN_MONTH 等)之一=] 和 Calendar.get() 方法。

Calendar.DAY_OF_MONTH 等于 5 的原因是因为它只是在 java.util.Calendar class 的实现中内部使用的整数来表示 DAY_OF_MONTH 字段.该整数的值实际上对用户并不重要。

有兴趣的其实可以自己去看看source code

/**
 * Field number for <code>get</code> and <code>set</code> indicating the
 * day of the month. This is a synonym for <code>DATE</code>.
 * The first day of the month has value 1.
 *
 * @see #DATE
 */
public final static int DAY_OF_MONTH = 5;

在你的情况下,你想要做类似

的事情
Calendar myCal = Calendar.getInstance();
int dayOfMonth = myCal.get(Calendar.DAY_OF_MONTH);

获取您感兴趣的月中实际日期值。

有关详细信息,请参阅 java.util.Calendar 的文档 here