最低支持API 21时如何将LocalDate转换为Date
LocalDate 转 Date 低版本Android兼容方案
报错原因
java.util.Date#from 方法及 java.time.LocalDate 所属的Java 8时间API,Android原生仅支持API Level 26及以上版本,因此minSdk设置为21时直接调用会触发API等级不兼容报错。
最优解决方案:开启核心库Desugaring
这是Google官方推荐的低版本Android兼容Java 8+ API的方案,开启后无需修改原有转换代码,即可在API 21及以上设备正常使用全量java.time相关能力。
开启步骤
- 确认项目根目录下的
build.gradle中Android Gradle插件版本不低于4.0.0:
buildscript { dependencies { classpath "com.android.tools.build:gradle:4.0.0+" } }
- 打开app模块下的
build.gradle,添加Desugaring配置:
android { compileOptions { // 开启核心库脱糖 coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // Kotlin项目需追加以下配置 kotlinOptions { jvmTarget = "1.8" } } dependencies { // 引入脱糖依赖 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
- 同步Gradle后,原有转换代码即可正常运行。
备选转换方案(无需开启Desugaring)
如果暂时无法开启Desugaring,可通过时间戳转换的方式实现兼容,代码如下:
val zoneId = ZoneId.systemDefault() // 计算LocalDate对应的毫秒级时间戳 val timeStamp = finalLocalDate.atStartOfDay(zoneId).toEpochSecond() * 1000 val finalDate = Date(timeStamp)
内容的提问来源于stack exchange,提问作者ant2009
相关产品推荐
相关产品推荐

