Java如何精确校验年龄在18-75周岁?现有代码存在逻辑问题
解决Java年龄精确校验(18-75周岁)的问题
原代码的核心问题是仅通过Period.between的getYears()获取年份差,完全忽略了月份和天数的差异。比如当用户出生日期是24-06-1948,今天是26-06-2023时,年份差是75,但实际用户已经过了75岁生日2天,此时应该判定为不符合条件,但原代码仍返回true。
修正后的代码
LocalDate today = LocalDate.now(ZoneId.systemDefault()); // 修正拼写错误:DateTimrFormatter → DateTimeFormatter DateTimeFormatter dobFormat = DateTimeFormatter.ofPattern("dd-MM-uuuu"); // 精确判断年龄范围:满18周岁且未超过75周岁 boolean isEligible = inputdate.isBefore(today.minusYears(18)) || inputdate.isEqual(today.minusYears(18)); isEligible &= inputdate.isAfter(today.minusYears(75)) || inputdate.isEqual(today.minusYears(75)); return isEligible;
逻辑说明
today.minusYears(18):计算18年前的今天,用户出生日期小于等于这个日期,说明已经满18周岁。today.minusYears(75):计算75年前的今天,用户出生日期大于等于这个日期,说明还未超过75周岁(即今天还没到用户的75岁生日,或者刚好是生日当天)。
另外,原代码还有两处小错误需要修正:
DateTimrFormatter拼写错误,应为DateTimeFormatterreturn false末尾缺少分号
内容的提问来源于stack exchange,提问作者Nani K
相关产品推荐
相关产品推荐

