首页 > 解决方案 > Kotlin 比较两个日期

问题描述

我正在尝试在用户添加的日期进行输入验证。我想检查用户添加的日期是否在今天日期之后,但我不明白该怎么做。用户插入的日期是字符串,因此我必须将其转换为日期,但我需要获取今天的日期并与输入日期进行比较。现在我写这个:

fun isDateValid(myDate: String) : Boolean{
           val date = SimpleDateFormat("yyyy-MM-dd").parse(myDate)
           return //compare 2 the dates
}

所以我将用户给出的日期转换为日期类型,但我怎样才能获得本地日期(现在)并比较两个日期?我正在使用 API 21,所以我不能使用 LocalDateTime 因为它给了我错误

更新 我尝试 Lino 的答案:

fun isDateValid(myDate: String) : Boolean{
            val date = SimpleDateFormat("yyyy-MM-dd").parse(myDate)
            return !date.before(Date())
}

但我收到此错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ticketapp, PID: 9173
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: java.text.ParseException: Unparseable date: ""
        at java.text.DateFormat.parse(DateFormat.java:362)
        at com.example.ticketapp.Util$Companion.isDeadLineValid(Util.kt:32)
        at com.example.ticketapp.ui.newTicket.NewTicketViewModel.checkInputs(NewTicketViewModel.kt:222)
        at com.example.ticketapp.ui.newTicket.NewTicketViewModel.createTicket(NewTicketViewModel.kt:196)
        at com.example.ticketapp.databinding.FragmentNewTicketBindingImpl._internalCallbackOnClick(FragmentNewTicketBindingImpl.java:783)
        at com.example.ticketapp.generated.callback.OnClickListener.onClick(OnClickListener.java:11)
        at android.view.View.performClick(View.java:7448)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
I/Process: Sending signal. PID: 9173 SIG: 9

标签: androidkotlin

解决方案


您可以使用以下方法检查您的日期是否有效:

fun isDateValid(myDate: String) : Boolean {
    try {
        val date = SimpleDateFormat("yyyy-MM-dd").parse(myDate)
        return !date.before(Date())
    } catch(ignored: java.text.ParseException) {
        return false
    }
}

您还可以SimpleDateFormat将其分解并放入与以下相同的文件/类中的顶级变量中isDateValid()

private val formatter = SimpleDateFormat("yyyy-MM-dd")

然后替换:

val date = SimpleDateFormat("yyyy-MM-dd").parse(myDate)

val date = formatter.parse(myDate)

推荐阅读