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
相关产品推荐
相关产品推荐

