Java 判断日期是否早于今天 - 优化解决今天也返回 true 的问题

在 Java 开发中,我们经常需要判断给定日期是否早于今天。可以使用 java.util.Date 类中的 before() 方法进行比较。然而,在处理日期时,有时会遇到一个问题:如果给定日期是今天,before() 方法也会返回 true,因为给定日期和今天的时间部分可能不同。

原始代码:

private static boolean isDateBeforeToday(String date) {
    SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd');
    try {
        Date givenDate = sdf.parse(date);
        Date today = Calendar.getInstance().getTime();
        return givenDate.before(today);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

优化方案:

为了解决这个问题,可以将给定日期和当前日期的日期部分进行比较,而不是比较整个日期对象。

修改后的代码:

private static boolean isDateBeforeToday(String date) {
    SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd');
    try {
        Date givenDate = sdf.parse(date);
        Date today = Calendar.getInstance().getTime();

        // 只比较日期部分,将时间部分设置为0
        givenDate = sdf.parse(sdf.format(givenDate));
        today = sdf.parse(sdf.format(today));

        return givenDate.before(today);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

解释:

  1. 使用 SimpleDateFormat 对象将给定日期和当前日期格式化为 yyyy-MM-dd 格式。
  2. 使用 sdf.parse() 方法将格式化的日期字符串解析为 Date 对象。
  3. 比较解析后的 Date 对象的日期部分,如果给定日期早于当前日期,则返回 true,否则返回 false

示例:

String date = '2023-12-20';
boolean isBeforeToday = isDateBeforeToday(date);
System.out.println(isBeforeToday); // 输出:false

通过上述优化,我们成功地解决了给定日期为今天也返回 true 的问题。现在,只有当给定日期早于当前日期的日期部分时,isDateBeforeToday() 方法才会返回 true

Java 判断日期是否早于今天 - 优化解决今天也返回 true 的问题

原文地址: https://www.cveoy.top/t/topic/fkVY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录