Kotlin-SimpleDateFormat解析需要无限的时间

时间:2019-06-20 03:53:26

标签: 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 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

4 个答案:

答案 0 :(得分:1)

使用以下功能

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
        }
    }

答案 1 :(得分:0)

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

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

请注意,将'括在Z中。您在日期格式中丢失了它。

答案 2 :(得分:0)

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

检查文件顶部的导入代码。

正确的解析异常

import java.text.ParseException

INCORRECT ParseException

import android.net.ParseException //Android example

您的日期格式也没有对齐,所以当然也需要修复。但理想情况下,如果日期字符串错误,您希望 try/catch 块阻止程序崩溃,因此最好使用错误数据对其进行测试。

答案 3 :(得分:0)

这里的时区实际上使用的是 ISO 8601 格式。 要通过 Java SimpleDateFormat 正确解析它,您应该使用以下模式: "yyyy-MM-dd'T'HH:mm:ssX"

这里的 X 表示 ISO 8601 格式的时区。 见https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html