You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:14:46