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

Kotlin解析Calendar转换的日期文本抛出DateTimeParseException求助

解决LocalDate.parse解析Calendar.time.toString()抛出的DateTimeParseException问题

这个异常的核心原因很直白:Calendar.time.toString()返回的字符串格式,和LocalDate.parse()默认使用的**ISO_LOCAL_DATE格式(yyyy-MM-dd)**完全不匹配。

Calendar的toString()输出的是类似Wed Sep 18 14:23:45 CST 2024这样带星期、月份缩写、时间、时区的字符串,而LocalDate默认只认识纯日期的标准格式,自然会解析失败。下面给你两种靠谱的解决方案:

方案一:存储时使用标准日期格式(推荐)

别直接用calendar.time.toString()存日期,主动把日期格式化为标准、可解析的字符串,这样后续操作不会有兼容性问题:

import java.util.Calendar
import java.time.format.DateTimeFormatter
import java.time.LocalDate
import java.time.ZoneId

fun main() {
    val daysAgo = 3
    // 获取调整后的日期
    val calendar = Calendar.getInstance()
    calendar.add(Calendar.DAY_OF_YEAR, -daysAgo)
    
    // 选用ISO标准日期格式(yyyy-MM-dd)
    val dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE
    // 将Calendar时间转换为LocalDate后再格式化存储
    val time = dateFormatter.format(
        calendar.time.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDate()
    )
    
    // 后续解析并减2天
    val date = LocalDate.parse(time)
    val twoDaysEarlier = date.minusDays(2)
    println(twoDaysEarlier) // 输出类似2024-09-15
}

方案二:如果已存储toString()结果,用对应格式解析

要是你已经把calendar.time.toString()的结果存在了标签里,可以先确定它的格式,再创建匹配的DateTimeFormatter来解析:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.Locale

fun main() {
    // 假设这是从标签中获取的字符串
    val time = "Wed Sep 18 14:23:45 CST 2024"
    
    // 匹配Calendar.toString()的格式,注意Locale要和输出一致(这里用ENGLISH适配英文月份缩写)
    val formatter = DateTimeFormatter.ofPattern(
        "EEE MMM dd HH:mm:ss zzz yyyy", 
        Locale.ENGLISH
    )
    
    // 先解析为ZonedDateTime,再提取LocalDate
    val date = formatter.parse(time, java.time.ZonedDateTime::from).toLocalDate()
    val twoDaysEarlier = date.minusDays(2)
    println(twoDaysEarlier) // 输出2024-09-16
}

注意事项:

  • 方案二的格式字符串和Locale必须严格匹配toString()的输出,比如系统是中文环境时,toString()可能输出中文星期和月份,这时候要把Locale改成Locale.CHINESE,格式字符串也要对应调整。
  • 优先选方案一,因为Calendar.toString()的格式依赖JDK实现,不同版本或环境可能有细微差异,标准格式的兼容性和可读性都更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:05:09