Date Formatter 带两位数的 24 小时制时间

Date Formatter 24-Hour time with two digits

我正在尝试检查字符串是否包含 24 小时制。 这是我当前的代码:


func isMilTime(from string: String) -> Bool {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    if (dateFormatter.date(from: string) != nil) {
        return true
    }else{
        return false
    }
}
print(isMilTime(from: "9:2")) //true

目前像“9:2”这样的个位数时间返回为真。我如何修改它以仅检测两位数的时间,如“9:02”?

为了仅检查格式,我建议使用正则表达式解决方案,returns true 范围 0:00 – 23:59

func isMilTime(from string: String) -> Bool {
    return string.range(of: "^(2[0-3]|[01]?\d):[0-5]\d$", options: .regularExpression) != nil
}

print(isMilTime(from: "9:2")) //false

按照@vadian 的建议使用正则表达式检查格式似乎可行。

func isMilTime(from string: String) -> Bool {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    if (dateFormatter.date(from: string) != nil) && isMilTimeReg(from: string) {
        return true
    }else{
        return false
    }
}

func isMilTimeReg(from string: String) -> Bool {
    return string.range(of: "^\d{1,2}:\d{2}$", options: .regularExpression) != nil
}

print(isMilTime(from: "2:3"))//false