我從 API "2022-01-01T00:00:00.000 02:00" 中獲取類似下一個的值,我想對日期進行驗證,以檢查收到的時間戳在未來是否有效。
我正在閱讀有關 SimpleDateFormat 的資訊,但我不知道這是否是在 kotlin 中執行此操作的最佳方法。
在java中我會這樣做:
public static boolean isValidDate(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss:ms");
dateFormat.setLenient(false);
try {
dateFormat.parse(inDate.trim());
} catch (ParseException pe) {
return false;
}
return true;
}
謝謝
uj5u.com熱心網友回復:
如果您嘗試驗證字串中的值,則可以使用類似的邏輯,如下所示:
private val pattern: Pattern? = null
private var matcher: Matcher? = null
private val DATE_PATTERN =
"(0?[1-9]|1[012]) [/.-] (0?[1-9]|[12][0-9]|3[01]) [/.-] ((19|20)\\d\\d)"
/**
* Validate date format with regular expression
* @param date date address for validation
* @return true valid date format, false invalid date format
*/
fun validate(date: String?): Boolean {
matcher = pattern.matcher(date)
return if (matcher.matches()) {
matcher.reset()
if (matcher.find()) {
val day: String = matcher.group(1)
val month: String = matcher.group(2)
val year: Int = matcher.group(3).toInt()
if (day == "31" &&
(month == "4" || month == "6" || month == "9" || month == "11" || month == "04" || month == "06" || month == "09")
) {
false // only 1,3,5,7,8,10,12 has 31 days
} else if (month == "2" || month == "02") {
//leap year
if (year % 4 == 0) {
!(day == "30" || day == "31")
} else {
!(day == "29" || day == "30" || day == "31")
}
} else {
true
}
} else {
false
}
} else {
false
}
}
參考:Android 中的日期驗證 或者如果您在決議字串后嘗試驗證,您可以參考這篇博文
注意:這些示例是用 Java 撰寫的,但邏輯可以很容易地轉換為 Kotlin。
希望這可以幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/488888.html
上一篇:角度表單陣列中的驗證問題
下一篇:特定格式的日期/時間驗證