首页 > 解决方案 > 与解析功能斗争

问题描述

于是开始学习 Kotlin 和 Android studio 编码。

我正在关注 Youtube 视频 https://www.youtube.com/watch?v=z3_QgdmXGK4&t=994s&ab_channel=Dr.ParagShukla

我正在制作简单的年龄计算器,但是不能让字符串变成日期,所以我可以用当前日期减去输入日期。代码看起来与视频中的完全相同。

代码编译良好并安装在 android 设备中,但是,每当按下计算年龄按钮时,应用程序都会因为 var dob = sdf.parse(dob) 函数而停止响应。我假设它无法将日期从字符串转换为日期格式以进行进一步计算。谢谢。

下面的代码:

fun openDatePicker(view: View) {
    var c = Calendar.getInstance()

    DatePickerDialog(
        this,
        DatePickerDialog.OnDateSetListener { datePicker, yy, mm, dd -> // listens what date picker has to say

            var mm = mm + 1
            var date = "$dd/ $mm /$yy "

            TimePickerDialog(
                this,
                TimePickerDialog.OnTimeSetListener { timePicker, hh, mi ->
                    date += " $hh:$mi"
                    editTextTextPersonName.setText(date) // shows date in the line
                },
                c.get(Calendar.HOUR_OF_DAY),
                c.get(Calendar.MINUTE),
                true
            ).show()
        }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)
    ).show()
}


fun Calculateage(view: View) {
    var today = Date() // todays date
    var dobs = editTextTextPersonName.text.toString() // takes value from input
    var sdf = SimpleDateFormat("mm/MM/yy HH:mm")
    var dob = sdf.parse(dobs) // converts the date to simple date, no can find difference

    var days = (today.time - dob.time) / 86400000 // converts into mil secs, need to divide by milsecs in a day
    var hours = (today.time - dob.time) % 86400000 / 3600000
    var minutes = (today.time - dob.time) % 86400000 % 3600000 / 60000
    var sec = (today.time - dob.time) % 86400000 % 3600000 % 60000/1000

    textView.visibility = View.VISIBLE
    textView.setText("Days = $days\nHours= $hours\nMinutes=$minutes\nSeconds = $sec")
}

标签: androidkotlin

解决方案


SimpleDateFormat的字符串值不匹配。

你的var date样子var date = "$dd/ $mm /$yy $hh:$mi"

您的 SimpleDateFormat 有"mm/MM/yy HH:mm"

您应该将格式化程序更改为以下内容: "dd/ MM /yy HH:mm"


推荐阅读