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

rio*_*rio 2 date kotlin

所以我的Kotlin应用程序正在接受一个输入字符串,它应该是某种格式的日期:

fun haveFun(dateStr: String){
    var formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy")
    var formattedDate = dateStr.format(formatter)
    println(formattedDate)
}
Run Code Online (Sandbox Code Playgroud)

问题是无论我发送哪个输入字符串,似乎一切都是有效的,并且没有抛出错误。

该程序对我发送的任何文本都很酷:61-Boby-2019甚至I'm not a date

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

vik*_*mar 5

这应该有效。而不是使用format()使用parse()它会在失败时抛出异常并在调用端处理它。

@Throws(ParseException::class)
fun haveFun(dateStr: String) {
    var formatter = SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault())
    val date = formatter.parse(dateStr)
    println(date)
}
Run Code Online (Sandbox Code Playgroud)

它会抛出如下错误:

java.text.ParseException: Unparseable date: "im not date"
Run Code Online (Sandbox Code Playgroud)

  • 当询问 java.time 中的现代“DateTimeFormatter”时,请不要使用“SimpleDateFormat”类。这是一个臭名昭著的麻烦制造者,而且早已过时了。我强烈反对使用此答案中的代码。它还提供了较差的验证。您的代码很乐意接受“2020-jan-6”、“2020-jan-61”、“6-jan-6 不是日期”和许多其他不正确的字符串。 (5认同)