Swift中日期格式校验方法失效求助:所有输入均返回失败
问题排查与解决方案
我来帮你搞定这个日期验证的问题~你的方法现在对所有输入都返回false,主要是两个关键原因导致的:
1. 日期格式不匹配
你预期成功的输入"09/25/2020"是月/日/年的格式(MM/dd/yyyy),但代码里的dateFormat设置的是"dd/MM/yyyy"(日/月/年)。按照原格式,09会被当成日期,25被当成月份——但一年只有12个月,这个输入自然会被判定为无效。
2. 未设置固定Locale,受系统区域干扰
DateFormatter默认使用系统的区域设置,有些地区的日期分隔符或解析规则会和你预期的不一致,导致解析失败。比如部分欧洲地区可能偏好.作为分隔符,或者日期顺序不同。
修正后的代码
下面是调整后的验证函数,解决了上述两个问题:
func isValidDate(dateString: String) -> Bool { let dateFormatterGet = DateFormatter() // 匹配输入的"MM/dd/yyyy"格式(月/日/年) dateFormatterGet.dateFormat = "MM/dd/yyyy" // 设置固定Locale,避免系统区域设置影响解析 dateFormatterGet.locale = Locale(identifier: "en_US_POSIX") // 可选:设置时区为UTC,确保解析不受本地时区干扰(不需要时区处理可忽略) dateFormatterGet.timeZone = TimeZone(abbreviation: "UTC") // 直接判断解析结果是否存在,简化代码逻辑 return dateFormatterGet.date(from: dateString) != nil }
测试验证
- 输入
"09/25/2020":现在会返回true,格式匹配且日期合法(9月25日是有效日期) - 输入
"4325/353/53":依然返回false,符合你的预期,因为月份、日期数值都超出了合法范围
内容的提问来源于stack exchange,提问作者naveen kumar
相关产品推荐
相关产品推荐

