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

iOS开发日期格式转换报错:Cannot call value of non-function type 'String?'

问题解决:日期字符串格式转换错误

你的错误根源是误用了DateFormatter的属性:dateFormat是用来设置/读取日期格式的字符串属性,不是可调用的方法,所以dateFormatter.dateFormat(from: dateString)这种写法会触发类型错误。

要完成从2024-09-22到22 Sep 2024的格式转换,需要分两步走:

  1. 将输入的日期字符串解析成Date类型对象
  2. 将Date对象格式化为目标样式的字符串

以下是修正后的完整代码:

let dateString = "2024-09-22"
let inputFormatter = DateFormatter()
// 设置输入字符串的格式,和原始字符串匹配
inputFormatter.dateFormat = "yyyy-MM-dd"
// 若需固定显示英文月份缩写,建议设置locale为en_US_POSIX,避免系统区域影响
inputFormatter.locale = Locale(identifier: "en_US_POSIX")
inputFormatter.timeZone = TimeZone.current

// 第一步:解析字符串为Date
guard let date = inputFormatter.date(from: dateString) else {
    print("日期解析失败")
    return
}

let outputFormatter = DateFormatter()
// 设置目标输出格式
outputFormatter.dateFormat = "dd MMM yyyy"
outputFormatter.locale = Locale(identifier: "en_US_POSIX")
outputFormatter.timeZone = TimeZone.current

// 第二步:将Date格式化为目标字符串
let convertedDate = outputFormatter.string(from: date)
print(convertedDate) // 输出:22 Sep 2024

额外说明

  • 若不需要严格的英文月份缩写,也可以保留Locale.current,但系统语言为非英文时,月份会显示对应语言的缩写(比如中文环境下显示“09月”)
  • 解析和格式化用两个独立的DateFormatter是更清晰的写法,也可以复用一个实例,先设置输入格式完成解析,再修改格式后执行格式化操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:47:34