You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Calendar类判断两个日期实例中哪个日期更晚?

如何比较两个Calendar实例的日期先后

嘿,刚好Calendar类本身就自带了日期比较的方法,不用自己去拆年份、月份、日期一个个比,很方便的。

核心方法:compareTo()

Calendar实现了Comparable<Calendar>接口,所以直接用compareTo()方法就能搞定,返回值会告诉你两个日期的先后关系:

  • 返回正数:调用方法的Calendar实例(比如这里的expiryDate)比参数里的(nowDate)更晚
  • 返回负数:调用方法的实例比参数里的更早
  • 返回0:两个日期完全一致

完整代码示例

Calendar expiryDate = Calendar.getInstance();
Calendar nowDate = Calendar.getInstance();
expiryDate.set(Calendar.DAY_OF_MONTH, 16);
expiryDate.set(Calendar.MONTH, Calendar.AUGUST);
expiryDate.set(Calendar.YEAR, 2020);

// 可选:如果只需要比较年月日,先清空时分秒毫秒,避免时间部分干扰判断
expiryDate.set(Calendar.HOUR_OF_DAY, 0);
expiryDate.set(Calendar.MINUTE, 0);
expiryDate.set(Calendar.SECOND, 0);
expiryDate.set(Calendar.MILLISECOND, 0);

nowDate.set(Calendar.HOUR_OF_DAY, 0);
nowDate.set(Calendar.MINUTE, 0);
nowDate.set(Calendar.SECOND, 0);
nowDate.set(Calendar.MILLISECOND, 0);

// 执行比较
int comparisonResult = expiryDate.compareTo(nowDate);

if (comparisonResult > 0) {
    System.out.println("expiryDate 对应的日期更晚");
} else if (comparisonResult < 0) {
    System.out.println("nowDate 对应的日期更晚");
} else {
    System.out.println("两个日期是同一天");
}

补充说明

如果你的业务只需要比较到年月日,一定要记得清空时间部分哦!因为Calendar.getInstance()获取的当前日期是包含精确到毫秒的当前时间的,如果不处理,可能会出现比如“今天是2020-08-16,但当前时间是上午10点,而expiryDate的时间是默认的0点”,这时候compareTo会认为nowDate更晚,这显然不符合你只比较日期的需求。

内容的提问来源于stack exchange,提问作者Common Sense

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:28:45