在 Kotlin 中获取当前年份有多种方式,以下是最常用的几种实现方案,适配不同场景(如 Java 8+ 新时间 API、传统 Calendar 类):
方案 1:推荐(Java 8+ 新时间 API,线程安全)
使用 java.time 包下的 Year、LocalDate 等类,是 Kotlin 中获取年份的首选方式(Android API 26+ 原生支持,低版本可通过 desugar 或 ThreeTenABP 兼容)。
import java.time.LocalDate
import java.time.Year
import java.time.ZoneId
fun getCurrentYear(): Int {
// 方式 1:直接获取当前年份(系统默认时区)
val year1 = Year.now().value
// 方式 2:通过 LocalDate 获取(更灵活,可扩展获取月/日)
val year2 = LocalDate.now().year
// 方式 3:指定时区(如 UTC、东八区)
val year3 = LocalDate.now(ZoneId.of("Asia/Shanghai")).year
return year1 // 返回任意一种即可
}
// 调用示例
fun main() {
val currentYear = getCurrentYear()
println("当前年份:$currentYear") // 输出示例:2025
}方案 2:兼容低版本(传统 Calendar 类)
如果需要兼容 Android 低版本(API < 26)或旧版 Java 环境,可使用 java.util.Calendar:
import java.util.Calendar
fun getCurrentYearCompat(): Int {
val calendar = Calendar.getInstance()
return calendar.get(Calendar.YEAR) // 获取当前年份
}
// 调用示例
fun main() {
val year = getCurrentYearCompat()
println("当前年份(兼容版):$year")
}方案 3:简化写法(一行代码)
如果只需快速获取,可直接简写:
// Java 8+ 简写 val currentYear = LocalDate.now().year // 兼容版简写 val currentYearCompat = Calendar.getInstance().get(Calendar.YEAR)
关键说明:
时区问题:now() 无参时使用系统默认时区,如需统一时区(如 UTC),建议显式指定 ZoneId(如 ZoneId.of("UTC"))。
Android 兼容:
API 26+:直接使用 java.time 包。
API < 26:添加 ThreeTenABP 依赖(com.jakewharton.threetenabp:threetenabp:1.4.4),然后使用 org.threeten.bp 包下的对应类(如 org.threeten.bp.LocalDate)。
线程安全:java.time 类是不可变且线程安全的,而 Calendar 是线程不安全的,多线程场景优先选前者。
完整示例(Android 兼容版)
// 如需兼容 Android API < 26,先添加 ThreeTenABP 依赖,然后:
import org.threeten.bp.LocalDate
import org.threeten.bp.ZoneId
fun getCurrentYearAndroid(): Int {
return LocalDate.now(ZoneId.systemDefault()).year
}以上方案可根据你的运行环境(Java 版本 / Android API 级别)选择,优先使用 java.time 系列 API,代码更简洁、安全。
版权声明
本文章如果涉及侵权,请联系我。
部分文章系本人原创未经许可,不得转载。



蒙公网安备 15090202000037号
评论列表
发表评论