服务器返回的ISO8601日期解析返回nil,无法显示在Label中求助
问题解决:日期解析返回nil的原因及修复方案
嘿,我一眼就看出问题啦——你的DateFormatter设置的日期格式和实际拿到的日期字符串不匹配,这就是解析返回nil的根源!
你拿到的日期字符串是"2018-04-27T02:05:00+00:00",里面没有毫秒部分(.SSS),但你的格式字符串写了.SSSZZZZZ,多了这个多余的毫秒占位符,解析器自然找不到对应内容,直接返回nil了。
另外还有个小细节要注意:解析这类标准ISO日期时,最好给DateFormatter指定en_US_POSIX的locale,避免设备的地区设置干扰解析(比如某些地区会把日期格式搞乱)。
给你修正后的完整代码:
let pulledDate = "2018-04-27T02:05:00+00:00" let dateFormatter = DateFormatter() // 关键:设置固定locale,避免地区差异影响解析 dateFormatter.locale = Locale(identifier: "en_US_POSIX") // 去掉多余的.SSS,匹配实际日期格式 dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" if let date = dateFormatter.date(from: pulledDate) { print("解析成功:\(date)") // 如果要显示到Label里,可以再调整显示格式 dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm" // 自定义你想要的显示样式 yourLabel.text = dateFormatter.string(from: date) } else { print("日期解析失败") }
这样修改后,应该就能正常解析出日期,然后顺利显示到Label里啦!
内容的提问来源于stack exchange,提问作者Rishabh.t
相关产品推荐
相关产品推荐

