日期格式化器 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:02
? 9
只是个位数?
你想打印(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 小时制,两位数的主要内容,如果未能解决你的问题,请参考以下文章