Java 判断日期是否早于今天 - 优化解决今天也返回 true 的问题
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;
}
解释:
- 使用
SimpleDateFormat对象将给定日期和当前日期格式化为yyyy-MM-dd格式。 - 使用
sdf.parse()方法将格式化的日期字符串解析为Date对象。 - 比较解析后的
Date对象的日期部分,如果给定日期早于当前日期,则返回true,否则返回false。
示例:
String date = '2023-12-20';
boolean isBeforeToday = isDateBeforeToday(date);
System.out.println(isBeforeToday); // 输出:false
通过上述优化,我们成功地解决了给定日期为今天也返回 true 的问题。现在,只有当给定日期早于当前日期的日期部分时,isDateBeforeToday() 方法才会返回 true。
原文地址: https://www.cveoy.top/t/topic/fkVY 著作权归作者所有。请勿转载和采集!