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

如何将Java LocalDate转换为ThreeTen LocalDate适配API23?

解决方案

前提准备

确保项目已引入ThreeTenABP依赖(适配API26以下的Java时间库兼容方案),并在Application类中完成初始化:

// 依赖示例(可根据实际需求调整版本)
implementation 'com.jakewharton.threetenabp:threetenabp:1.4.6'
// 在自定义Application类中初始化ThreeTenABP
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        AndroidThreeTen.init(this)
    }
}

两种可行的转换方法

Java java.time.LocalDate 和ThreeTen org.threeten.bp.LocalDate 均基于ISO-8601标准实现,转换逻辑简单直接:

方法1:通过纪元天数转换(最简洁)

利用两者兼容的纪元天数(从1970-01-01起的累计天数)完成转换:

import org.threeten.bp.LocalDate as ThreeTenLocalDate
import java.time.LocalDate as JavaLocalDate

override fun onRangeChanged(firstVisibleDate: JavaLocalDate, lastVisibleDate: JavaLocalDate) {
    val threeTenDate = ThreeTenLocalDate.ofEpochDay(firstVisibleDate.toEpochDay())
    onRangeChange(threeTenDate)
}

方法2:提取年月日字段构建

直接获取Java LocalDate的年、月、日数值,手动构建ThreeTen LocalDate:

import org.threeten.bp.LocalDate as ThreeTenLocalDate
import java.time.LocalDate as JavaLocalDate

override fun onRangeChanged(firstVisibleDate: JavaLocalDate, lastVisibleDate: JavaLocalDate) {
    val threeTenDate = ThreeTenLocalDate.of(
        firstVisibleDate.year,
        firstVisibleDate.monthValue,
        firstVisibleDate.dayOfMonth
    )
    onRangeChange(threeTenDate)
}

注意事项

  • 导入时使用as别名区分两个LocalDate类,避免命名冲突;
  • 必须确保ThreeTenABP已在Application中完成初始化,否则会触发运行时异常。

内容的提问来源于stack exchange,提问作者Ismael Toro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:55:57