Android(最低版本21)Kotlin正确解析Date的方法,现有解析逻辑不生效
问题原因
- 原格式字符串未匹配输入日期中的
T分隔符 - 使用了12小时制标识
hh,输入时间为24小时制,需替换为HH - 未匹配末尾的UTC时区标识
Z,也未对应设置时区,会引发解析失败或时区偏移错误
正确实现方案
方案1:基于SimpleDateFormat修改(不推荐,SimpleDateFormat为线程不安全类)
val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").apply { timeZone = TimeZone.getTimeZone("UTC") } var convertedDate = Date() try { convertedDate = dateFormat.parse(message.created_at) } catch (e: ParseException) { e.printStackTrace() }
格式字符串里的'T'和'Z'用单引号包裹表示固定匹配字符,同时强制设置时区为UTC,避免解析后出现时区偏移问题。
方案2:基于java.time包实现(推荐,类不可变线程安全,无需自定义格式)
你要解析的格式是标准ISO 8601瞬时时间格式,可直接用Instant类解析,无需手动编写格式匹配规则:
var convertedDate = Date() try { // 直接解析标准ISO格式字符串 val instant = Instant.parse(message.created_at) // 如果不需要兼容旧Date类,可直接使用instant对象 convertedDate = Date.from(instant) } catch (e: DateTimeParseException) { e.printStackTrace() }
内容的提问来源于stack exchange,提问作者Suryakant Bharti
相关产品推荐
相关产品推荐

