iOS DateFormatter转换指定日期字符串的正确dateFormat是什么?
iOS DateFormatter 对应日期格式解答
正确的dateFormat取值
你需要的日期格式为 yyyy-MM-dd'T'HH:mm:ss.SSSZ
格式各部分对应含义
yyyy:4位公历年,匹配示例中的2021MM:2位月份,匹配示例中的09dd:2位日期,匹配示例中的10'T':原样匹配字符串中的固定分隔符T,加单引号是避免字符被识别为格式占位符HH:24小时制的2位小时数,匹配示例中的12mm:2位分钟数,匹配示例中的57ss:2位秒数,匹配示例中的01SSS:3位毫秒数,匹配你困惑的.671部分,注意必须为大写S,小写s对应秒的占位符Z:匹配时区标识,对应示例末尾的Z(代表UTC时区),无需加单引号包裹。如果确认后端固定返回UTC时区的Z标识,也可以将格式改为yyyy-MM-dd'T'HH:mm:ss.SSS'Z',同时补充配置formatter.timeZone = TimeZone(secondsFromGMT: 0)即可,解析效果一致。
常见解析失败注意事项
大多数人配置了正确格式仍解析失败,是因为没有为DateFormatter设置固定的本地化标识,避免设备系统的语言、时区、时间制式设置影响解析结果,必须补充如下配置:dateFormatter.locale = Locale(identifier: "en_US_POSIX")
完整代码示例
let dateStr = "2021-09-10T12:57:01.671Z" let formatter = DateFormatter() // 固定本地化标识,不受系统设置影响 formatter.locale = Locale(identifier: "en_US_POSIX") formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" let targetDate = formatter.date(from: dateStr)
内容的提问来源于stack exchange,提问作者thecloud_of_unknowing
相关产品推荐
相关产品推荐

