如何使用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
相关产品推荐
相关产品推荐

