iOS开发日期格式转换报错:Cannot call value of non-function type 'String?'
问题解决:日期字符串格式转换错误
你的错误根源是误用了DateFormatter的属性:dateFormat是用来设置/读取日期格式的字符串属性,不是可调用的方法,所以dateFormatter.dateFormat(from: dateString)这种写法会触发类型错误。
要完成从2024-09-22到22 Sep 2024的格式转换,需要分两步走:
- 将输入的日期字符串解析成
Date类型对象 - 将
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
相关产品推荐
相关产品推荐

