比较两个日历对象

2022-09-01 07:59:21

我想比较两个 Calendar 对象,看看它们是否都包含相同的日期。我不在乎天数以下的任何价值。

我已经实现了这个,我想不出它应该失败的任何情况:

private static boolean areEqualDays(Calendar c1, Calendar c2) {
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    return (sdf.format(c1.getTime()).equals(sdf.format(c2.getTime())));
}

这种方法是否正确,还是应该逐个字段比较 c1 和 c2?


答案 1

尝试 compareTo

Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.compareTo(c2);

退货

如果参数表示的时间等于此日历表示的时间,则值为 0;如果此日历的时间早于参数所表示的时间,则值小于 0;如果此日历的时间晚于参数所表示的时间,则为大于 0 的值。

编辑

import org.apache.commons.lang3.time.DateUtils;

您可以使用来检查它是否是同一天。DateUtils.isSameDay

boolean isSameDay = DateUtils.isSameDay(c1, c2);

28 Mar 2002 13:45 和 28 Mar 2002 06:01 将返回 true。28 Mar 2002 13:45 和 12 Mar 2002 13:45 将返回 false。


答案 2

我已经实现了这个,我想不出它应该失败的任何情况

如果两个日历位于不同的时区,它将失败 - 它们可能表示完全相同的毫秒,但该时刻可能会根据时区分为不同的日期。

如果两个日历代表不同的日历系统,它也可以说是失败的 - 即使它们代表相同的“日”,如果两个日历以不同的方式表示那一天,你可以争辩说它应该失败。

就个人而言,我强烈建议您使用Joda Time,它具有仅表示日期的类型 - 这将摆脱时区问题,而不是日历系统问题。如果您始终可以假设您正在使用相同的日历系统,那么没关系。LocalDate

(此外,仅出于比较目的执行字符串操作很丑陋 - 我只是直接检查等。calendar.get(Calendar.YEAR)


推荐