You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中字符串转Date返回nil,求排查问题原因

问题分析与解决

嘿,这个问题我太熟了——你设置的日期格式字符串和实际拿到的日期字符串完全不匹配,这就是date返回nil的根本原因!

你手里的日期字符串是May 31, 2018 at 3:35 PM,但你给dateFormatter用的格式是yyyy-MM-dd HH:mm:ss,这个格式对应的是2018-05-31 15:35:00这种结构的字符串,两者完全搭不上,自然解析失败返回nil啦。

解决步骤

  • 第一步:匹配正确的日期格式
    针对May 31, 2018 at 3:35 PM这种格式,对应的dateFormat应该写成MMM dd, yyyy 'at' h:mm a,每个部分对应含义:

    • MMM:缩写的月份名称(比如May)
    • dd:两位数字的日期(31)
    • yyyy:四位数字的年份(2018)
    • 'at':固定的"at"字符串,用单引号包起来表示这是字面量,不用解析
    • h:mm:12小时制的小时+分钟(3:35)
    • a:上午/下午标记(PM)
  • 第二步:显式设置Locale(推荐操作)
    为了避免系统区域设置搞乱解析结果,尤其是你的App可能在非英文环境运行时,建议给dateFormatter加上en_US_POSIX的locale,这样不管系统语言是什么,解析英文格式的日期都不会出错。

修改后的完整代码

if let order_date = value["order_date"] as? String { 
    let dateFormatter = DateFormatter() 
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") // 固定locale,避免解析异常
    dateFormatter.dateFormat = "MMM dd, yyyy 'at' h:mm a" 
    if let date = dateFormatter.date(from: order_date) {
        // 解析成功啦,这里处理你的date对象就行
        print(date)
    } else {
        // 可以加个解析失败的提示,方便调试
        print("日期解析失败啦,检查下字符串格式是否正确")
    }
}

小提示

要是你的日期字符串里月份缩写有大小写变化(比如may而非May),或者日期是单数字(比如5而非05),MMM和dd格式符都能自动适配,不用额外调整哦~

内容的提问来源于stack exchange,提问作者user9832488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:00:13