Swift DateFormatter返回错误日期的技术问题求助
解决Swift日期解析错误的问题
我一眼就揪出了问题的关键,咱们一步步来修复这个日期解析错误:
核心问题:小时格式不匹配
你用了HH:mm来匹配带AM/PM的时间,但HH是24小时制的小时标识(范围00-23),而你的输入字符串是12小时制格式(带PM后缀),这完全不匹配!应该换成hh:mm(12小时制,范围01-12)才能正确识别带AM/PM的时间。
时区设置的注意点
你把dateFormatter.timeZone设为UTC,但要注意:如果原字符串里的"3:31 PM"是本地时区的时间,强制用UTC解析会导致时间偏移;如果原时间本身就是UTC时间,这个设置没问题。要是不确定原时间时区,建议先注释掉这行,用系统默认时区测试。
修正后的代码
let dateString = "May 2, 2018 at 3:31 PM" let dateFormatter = DateFormatter() // 把HH改成hh,匹配12小时制+AM/PM格式 dateFormatter.dateFormat = "MMM dd, yyyy 'at' hh:mm a" // 若原时间是UTC则保留,否则注释/替换为对应时区 dateFormatter.timeZone = TimeZone(identifier: "UTC") dateFormatter.locale = Locale(identifier: "en_US_POSIX") // 用可选绑定避免强制解包崩溃 if let date = dateFormatter.date(from: dateString) { // 可以加个输出验证结果 let displayFormatter = DateFormatter() displayFormatter.dateStyle = .long displayFormatter.timeStyle = .long print(displayFormatter.string(from: date)) } else { print("日期解析失败") }
额外提醒
en_US_POSIX的设置非常正确,它能让解析不受系统区域设置干扰,固定用英文规则识别月份和AM/PM标识。- 永远尽量用
if let/guard let处理日期解析结果,别用强制解包(!),避免因格式不匹配导致崩溃。
内容的提问来源于stack exchange,提问作者AndQ
相关产品推荐
相关产品推荐

