在 Kotlin Android(最低 Android 版本 21)中解析日期的正确方法。我的解析不起作用

Sur*_*rti 5 java parsing android date kotlin

我想以这种格式解析此日期 2021-11-03T14:09:31.135Z ( message.created_at)

我的代码是这样的:

val dateFormat = SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")
var convertedDate = Date()
try {
    convertedDate = dateFormat.parse(message.created_at)
} catch (e: ParseException) {
    e.printStackTrace()
}
Run Code Online (Sandbox Code Playgroud)

解析失败

Nit*_*ish 8

不要使用SimpleDateFormat它,它已经过时了,而且很麻烦
用于DateTimeFormatter解析日期。

 fun parseDate() {
        var formatter: DateTimeFormatter? = null
        val date = "2021-11-03T14:09:31.135Z" // your date string
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") // formatter
            val dateTime: ZonedDateTime = ZonedDateTime.parse(date, parser) // date object
            val formatter2: DateTimeFormatter =
                DateTimeFormatter.ofPattern("EEEE, MMM d : HH:mm") // if you want to convert it any other format
            Log.e("Date", "" + dateTime.format(formatter2))
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出: 11 月 3 日星期三:14:09

要在 android 8 以下使用此功能,请使用脱糖

  • SuryakantBharti,那太好了,但我仍然建议您迁移到现代 java api - 参考 @deHarr 答案或我的,您可以阅读[新日期时间 api 形成的原因](/sf/) 9277747/android-simpledateformat-h​​ow-to-use-it) ,由 Arwind Kumar 回答,或者谷歌搜索可能会给你更多的理由 (2认同)

MC *_*ror 2

嗯,格式并不完全像字符串的样子:

  • T日期和时间之间有一个空格而不是文字
  • 最后没有偏移符号
  • 您正在使用hh,它是 12 小时格式。HH代替使用。

这种格式应该可以做到:

yyyy-MM-dd'T'HH:mm:ss.SSSX
Run Code Online (Sandbox Code Playgroud)

但请注意,DateSimpleDateFormat已经过时且麻烦java.time代替使用。如果您的 Android API 级别似乎太低,您可以使用ThreeTen Backport

  • 是的,会考虑这个建议。 (2认同)