日期格式化器 24 小时制,两位数

Posted

技术标签:

【中文标题】日期格式化器 24 小时制,两位数【英文标题】:Date Formatter 24-Hour time with two digits 【发布时间】:2021-01-18 07:23:21 【问题描述】:

我正在尝试检查字符串是否包含 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”?

【问题讨论】:

您要允许9:029 只是个位数? 你想打印(isMilTime(from: "9:2")) 打印假? @zeytin 是的。因为如果我从 likedateFormatter.dateFormat = "HHmm" 的时间中删除分号, print(isMilTime(from: "32")) 打印为真。所以为了消除这个,我需要它返回 false。 @Sweeper 我只需要分钟部分有两位数。 @Ibrahim99 我不明白为什么你需要删除分号。 9:20 和 9.2 在 dateformatter 方面是一样的。您确实需要区分两者,那么为什么不检查开头的字面意思。 【参考方案1】:

要仅检查我建议使用正则表达式解决方案的格式,它会为范围 0:00 – 23:59 返回 true

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

【讨论】:

【参考方案2】:

使用正则表达式检查@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: "^\\d1,2:\\d2$", options: .regularExpression) != nil


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

【讨论】:

请看我编辑的答案。它避免了DateFormatter 检查。

以上是关于日期格式化器 24 小时制,两位数的主要内容,如果未能解决你的问题,请参考以下文章

javascript Date 日期格式化 formatDate

python中时间日期格式化符号

python日期格式化符号

Python时间模块----时间日期格式化符号

python中时间日期格式化符号

python中时间日期格式符号