android - 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
解决方案
您可以使用以下方法检查您的日期是否有效:
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)
推荐阅读
- python - 如何在数据框中添加缺失的日期并填充python中的其他相应列?
- django - Stripe 使用 django 的 webhook 说:stripe.error.SignatureVerificationError
- css - 仅在 Chrome 中出现奇怪的 CSS 阴影错误?
- android - 由于带有新代码的新版本,有关如何在 Android Studio 中编写 Soundboard 的教程后出现问题
- amazon-s3 - 有没有办法在 S3 存储桶策略中包含组织 ID
- lua - LuaJIT 的 C 解析器中的字符串文字支持
- apache-kafka - KAFKA - 错误锁定目录时磁盘错误
- html - 是否可以在 CSS 中重新定义命名颜色?
- c - Cello 库如何能够引入运算符和关键字的使用,即使它们不是 C 库的一部分?
- python - Python pandas检查行是否包含字符串