Swift日期格式转换异常求助:转换后时间不符
问题分析与解决方案
嘿,我一眼就发现你代码里的问题啦!问题出在解析日期时的时间格式标识符上:
你用了HH:mm a来解析带AM/PM的时间,但HH是用来表示24小时制(00-23)的小时标识,而搭配AM/PM标记的应该用hh(12小时制,01-12)。当你用HH时,DateFormatter无法正确识别AM/PM对应的时段,导致把10 AM错误解析成了00点,最终输出就变成了2018-04-26T00:17。
修正后的代码
只需要把解析阶段的dateFormat改成"MM-dd-yyyy hh:mm a"就可以解决问题了,另外建议不要用强制解包!,避免日期解析失败时崩溃:
let myDateString = "04-26-2018 10:17 AM" let dateFormatter = DateFormatter() // 用hh表示12小时制小时,搭配AM/PM dateFormatter.dateFormat = "MM-dd-yyyy hh:mm a" // 可选绑定避免强制解包崩溃 if let myDate = dateFormatter.date(from: myDateString) { dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm" let somedateString = dateFormatter.string(from: myDate) print(somedateString) // 输出:2018-04-26T10:17 } else { print("日期解析失败") }
额外提醒
HH:24小时制小时(00-23),不需要AM/PM标记hh:12小时制小时(01-12),必须搭配AM/PM标记(a)才能正确解析时段- 始终避免强制解包
!,用可选绑定处理可能的解析失败情况
内容的提问来源于stack exchange,提问作者Mike T
相关产品推荐
相关产品推荐

