Android Kotlin-SimpleDataFormat解析需要无限时间

Android Kotlin-SimpleDataFormat解析需要无限时间,android,datetime,debugging,kotlin,simpledateformat,Android,Datetime,Debugging,Kotlin,Simpledateformat,我正在尝试使用SimpleDateFormat解析日期字符串,它不会停止,也不会给出任何异常。请看下面的代码 fun getDate(dateStr: String) { try { /** DEBUG dateStr = '2006-04-16T04:00:00Z' **/ val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH) val mDa

我正在尝试使用
SimpleDateFormat
解析日期字符串,它不会停止,也不会给出任何异常。请看下面的代码

fun getDate(dateStr: String) {

    try {
        /** DEBUG dateStr = '2006-04-16T04:00:00Z' **/
        val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH)
        val mDate = formatter.parse(dateStr) // this never ends while debugging
    } catch (e: Exception){
        Logger.e("Error $e") // this never gets called either
    }
}
可能的问题是什么

注意:我正在使用

Android Studio:3.4.1,Kotlin版本:1.3.31,Min SDK:23,Target SDK:28,Compile SDK:28

使用下面的函数

fun getDate(dateStr: String) {
        try {
            /** DEBUG dateStr = '2006-04-16T04:00:00Z' **/
            val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH)
            val mDate = formatter.parse(dateStr) // this never ends while debugging
            Log.e("mDate", mDate.toString())
        } catch (e: Exception){
            Log.e("mDate",e.toString()) // this never gets called either
        }
    }

您的日期格式不正确。它应该如下所示

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

请注意随附的带有Z的
。您的日期格式中缺少了Z。

我也有类似的问题,我的问题是导入了错误的异常。您需要确保您正在导入java.text解析异常

检查文件顶部的导入代码

纠正语法异常

import java.text.ParseException
import android.net.ParseException //Android example
不正确的语法异常

import java.text.ParseException
import android.net.ParseException //Android example

你的约会格式也不一致,所以当然也需要修正。但理想情况下,如果日期字符串不正确,您希望try/catch块阻止程序崩溃,因此最好使用不正确的数据对其进行测试。

这里的时区实际上使用的是ISO 8601格式。 要通过Java SimpleDataFormat正确解析此内容,应使用以下模式: “yyyy-MM-dd'HH:MM:ssX”

这里X表示ISO 8601格式的时区。
请参见

java.text.ParseException:Unparseable date:“2006-04-16T04:00:00Z”Its giving error Its giving parse Exception directly。。使用
yyyy-MM-dd'T'HH:MM:ss'Z'
因为您的日期没有区域值。。使用Java 8的
DateTime
API或类似
ThreeTenBP
的后台端口进行日期操作。在
Z
之前和之后都缺少
。是不是应该这样:
yyyy-MM-dd'HH:MM:ss'Z'
在这段代码中?可能是有趣的重复,它解决了我的问题。但我想知道为什么调试时没有发生异常。非常感谢。很高兴我帮不上忙Z
是UTC的偏移量(0),必须按此进行解析(而不是文字),否则(在大多数JVM上)会得到不正确的结果。更正:它恰好在时区设置为UTC的Android设备上正常工作。我相信他们没有那么多。错了。
Z
是UTC的一个偏移量(0),需要这样解析(而不是文字),否则您将在绝大多数JVM上得到错误的时间。