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

Android解析特定日期字符串时出现Unparseable date异常求助

解决日期字符串解析Unparseable date异常问题

要解析的日期字符串:
"Wed Jul 12 2023 23:58:20 GMT+0000 (Coordinated Universal Time)"

原Kotlin代码:

val sdf = SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss ", Locale.getDefault())
val time = try {
    val mDate = sdf.parse(input)
    mDate!!.time
} catch (e: ParseException) {
    -1
}

抛出异常:

Unparseable date: "Wed Jul 12 2023 23:58:20 GMT+0000 (Coordinated Universal Time)"


修复方案

方案1:修正SimpleDateFormat的格式与Locale

问题出在两点:格式字符串未覆盖完整的日期内容,且未指定匹配英文日期的Locale。

修正后的代码:

val input = "Wed Jul 12 2023 23:58:20 GMT+0000 (Coordinated Universal Time)"
// 指定Locale.ENGLISH确保能解析英文星期、月份缩写
val sdf = SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z '('zzzz')'", Locale.ENGLISH)
val time = try {
    val mDate = sdf.parse(input)
    mDate?.time ?: -1
} catch (e: ParseException) {
    -1
}

格式说明:

  • 'GMT':匹配字符串中的固定"GMT"文本(单引号包裹表示字面量)
  • Z:匹配+0000这种RFC822格式的时区偏移
  • '('zzzz')':匹配括号中的完整时区名称(如"Coordinated Universal Time")

方案2:使用Java 8+推荐的新日期API(更可靠)

SimpleDateFormat是线程不安全的过时API,推荐使用java.time包下的类:

import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter

val input = "Wed Jul 12 2023 23:58:20 GMT+0000 (Coordinated Universal Time)"
val formatter = DateTimeFormatter.ofPattern("EEE MMM dd yyyy HH:mm:ss 'GMT'Z '('zzzz')'", Locale.ENGLISH)
val time = try {
    val zonedDateTime = ZonedDateTime.parse(input, formatter)
    zonedDateTime.toInstant().toEpochMilli()
} catch (e: Exception) {
    -1L
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:14