Date 如何在Kotlin中将输入字符串验证为有效日期?

Date 如何在Kotlin中将输入字符串验证为有效日期?,date,kotlin,Date,Kotlin,因此,我的Kotlin应用程序正在接受一个输入字符串,该字符串应为特定格式的日期: fun haveFun(dateStr: String){ var formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy") var formattedDate = dateStr.format(formatter) println(formattedDate) } 问题是,无论我发送哪个输入字符串,似乎所有内容都是有效的,并且不会抛出

因此,我的
Kotlin
应用程序正在接受一个输入字符串,该字符串应为特定格式的日期:

fun haveFun(dateStr: String){
    var formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy")
    var formattedDate = dateStr.format(formatter)
    println(formattedDate)
}
问题是,无论我发送哪个输入字符串,似乎所有内容都是有效的,并且不会抛出错误

无论我发送什么文本,该程序都很酷:
61-Boby-2019
甚至
我不是约会对象


从Java开始,我习惯于抛出一些异常或
是有效的
方法,但我在Kotlin中还没有找到这样的方法

您使用了错误的方法来格式化日期

您使用的方法格式(
dateStr.format(formatter)
)用于格式化输入,该输入将当前字符串作为格式字符串,如下所述:

format(vararg args:Any?):字符串将此字符串用作 格式化字符串并返回通过替换 使用默认区域设置指定参数

你需要做些别的事情来实现你想要的

var formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy")
formatter.format(LocalDate.now()) //12-Dec-2019

这应该行得通。使用parse()而不是format(),如果失败,它将抛出异常,并在调用端处理该异常

@Throws(ParseException::class)
fun haveFun(dateStr: String) {
    var formatter = SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault())
    val date = formatter.parse(dateStr)
    println(date)
}
它将抛出如下错误:

java.text.ParseException: Unparseable date: "im not date"

当问到来自java.time的现代
DateTimeFormatter
时,请不要使用
SimpleDateFormat
类。这是一个臭名昭著的麻烦制造者,早已过时。我强烈反对使用此答案中的代码。它也给出了较差的验证。您的代码很乐意接受
2020-jan-6
2020-jan-61
6-jan-6不是日期
,以及许多其他不正确的字符串。这是否回答了您的问题?另见。