Kotlin中判断当前日期与生日日期差值是否超18年的方法
在Kotlin中判断日期差值是否超过18年的方法
嘿,这个问题我刚好踩过坑,直接拿年份相减很容易出bug(比如生日还没到当年的情况),下面给你两种靠谱的实现方式,都是基于Java 8+推荐的java.time日期API(Kotlin可以直接复用):
方法一:使用Period类计算年/月/日差值
Period会精确计算两个日期之间的年、月、日差距,我们可以基于这个来判断是否超过18年:
import java.time.LocalDate import java.time.Period fun main() { val currentDate = LocalDate.of(2019, 10, 9) val birthday = LocalDate.of(2000, 1, 1) val period = Period.between(birthday, currentDate) // 判断逻辑:年份差>18,或者年份差=18但已经过了当年的生日 val isOver18Years = period.years > 18 || (period.years == 18 && (period.months > 0 || period.days > 0)) println(isOver18Years) // 输出:true }
方法二:用ChronoUnit.YEARS计算完整年份差
这种方式更直观,先算两个日期之间的完整年份数,再判断是否刚好满18年但已过周年:
import java.time.LocalDate import java.time.temporal.ChronoUnit fun main() { val currentDate = LocalDate.of(2019, 10, 9) val birthday = LocalDate.of(2000, 1, 1) val fullYearsDiff = ChronoUnit.YEARS.between(birthday, currentDate) // 判断逻辑:完整年份差>18,或者差=18但当前日期在18周年生日之后 val isOver18Years = fullYearsDiff > 18 || (fullYearsDiff == 18 && currentDate.isAfter(birthday.plusYears(18))) println(isOver18Years) // 输出:true }
为什么不能直接减年份?
举个反例:如果生日是2000-11-01,当前日期是2018-10-09,直接2018-2000=18,但实际上距离18周年生日还有不到一个月,并没有超过18年。上面两种方法都会正确判断这种情况,返回false。
内容的提问来源于stack exchange,提问作者Vadim Fedchuk
相关产品推荐
相关产品推荐

