Kotlin - SimpleDateFormat 解析需要无限时间
Kotlin - SimpleDateFormat parsing takes infinite time
我正在尝试用 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 version: 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 的封闭 '
。您在日期格式中遗漏了它。
我遇到了类似的问题,我的问题是我导入了错误的 ParseException。您需要确保您正在导入 java.text 解析异常。
检查文件顶部的导入代码。
正确的 ParseException
import java.text.ParseException
不正确的 ParseException
import android.net.ParseException //Android example
您的日期格式也不一致,因此当然也需要修复。但理想情况下,如果日期字符串错误,您希望 try/catch 块阻止程序崩溃,因此最好使用错误数据对其进行测试。
这里的时区实际上是使用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
我正在尝试用 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 version: 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 的封闭 '
。您在日期格式中遗漏了它。
我遇到了类似的问题,我的问题是我导入了错误的 ParseException。您需要确保您正在导入 java.text 解析异常。
检查文件顶部的导入代码。
正确的 ParseException
import java.text.ParseException
不正确的 ParseException
import android.net.ParseException //Android example
您的日期格式也不一致,因此当然也需要修复。但理想情况下,如果日期字符串错误,您希望 try/catch 块阻止程序崩溃,因此最好使用错误数据对其进行测试。
这里的时区实际上是使用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