如何在Android中检查日期是否有效?

44u64gxh  于 2023-08-01  发布在  Android
关注(0)|答案(2)|浏览(167)

我已经有一个函数来验证我的日期。问题是我没有2月30日的验证,例如。我认为也许有一种更简单的原生方式在Android上进行此验证。你能帮我吗?
我目前的验证功能是:

fun isDateOfBirthValid(date: String): Boolean {
    if (date.length != 10) {
        return false
    }

    val day = date.substring(0, 2).toIntOrNull()
    val month = date.substring(3, 5).toIntOrNull()
    val year = date.substring(6, 10).toIntOrNull()

    if (day == null || month == null || year == null) {
        return false
    }

    if (day < 1 || day > 31 || month < 1 || month > 12 || year < 1900) {
        return false
    }

    val formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
    if (LocalDate.parse(date, formatter) > LocalDate.now()) {
        return false
    }

    return true
}

字符串

nqwrtyyt

nqwrtyyt1#

只要尝试解析日期就足够了。如果它抛出一个异常,你知道它是不正确的。或者当分析的日期与输入不匹配时。比如说

fun isDateOfBirthValid(date: String): Boolean {
    try {
        val formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
        val localDate = LocalDate.parse(date, formatter)
        if (!formatter.format(localDate).equals(date) || localDate > LocalDate.now()) {
            return false
        }
        return true
    } catch (e: Exception) {
        return false
    }
}

字符串

tjvv9vkg

tjvv9vkg2#

import java.text.SimpleDateFormat
import java.util.*

object DateValidator {

    fun isDateValid(dateStr: String): Boolean {
        val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
        sdf.isLenient = false // This ensures strict date validation

        return try {
            val date = sdf.parse(dateStr)
            // If the parsing succeeds, the date is valid
            true
        } catch (e: ParseException) {
            // If an exception is caught, the date is not valid
            false
        }
    }
}

字符串
用法

val inputDate = "2023-07-31"
val isValidDate = DateValidator.isDateValid(inputDate)


希望这能有所帮助

相关问题