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

iOS Swift中如何拆分含时间的日期数组以提取纯日期?

在Swift中提取日期时间数组的纯日期部分

嗨,这个需求很常见,我给你两种可行的方案,根据你的实际场景来选就好:

方案一:快速字符串拆分(适合格式完全固定的情况)

因为你的数组里每个元素都是yyyy-MM-dd HH:mm:ss的固定格式,直接按空格分割取前半部分就搞定,简单高效:

let dateTimeArray = ["2018-03-21 11:09:25","2018-03-22 11:09:25","2018-03-23 11:09:25","2018-03-24 11:09:25"]
let pureDateArray = dateTimeArray.map { element in
    // 按空格拆分字符串,取第一个部分;如果拆分失败就返回原字符串做兜底
    element.components(separatedBy: " ").first ?? element
}

// 输出结果:["2018-03-21", "2018-03-22", "2018-03-23", "2018-03-24"]

这个方法的优点是代码少、速度快,完全不需要处理日期解析的复杂逻辑,前提是你能保证所有输入字符串的格式都是日期+空格+时间的结构。

方案二:用DateFormatter严谨转换(适合需要容错或格式可能变化的情况)

如果你的数据源可能存在格式不规范的情况,或者未来有调整日期格式的可能,用DateFormatter做解析和格式化会更可靠,还能自动过滤掉无效的日期字符串:

let dateTimeArray = ["2018-03-21 11:09:25","2018-03-22 11:09:25","2018-03-23 11:09:25","2018-03-24 11:09:25"]

// 配置输入格式的DateFormatter
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
inputFormatter.locale = Locale(identifier: "en_US_POSIX") // 避免区域设置影响解析结果

// 配置输出纯日期的格式
let outputFormatter = DateFormatter()
outputFormatter.dateFormat = "yyyy-MM-dd"
outputFormatter.locale = Locale(identifier: "en_US_POSIX")

// 遍历数组转换,compactMap会自动过滤解析失败的元素
let pureDateArray = dateTimeArray.compactMap { dateTimeStr in
    guard let date = inputFormatter.date(from: dateTimeStr) else {
        return nil // 解析失败时返回nil,会被compactMap过滤掉;也可以返回原字符串做兜底
    }
    return outputFormatter.string(from: date)
}

这里要注意设置locale为en_US_POSIX,这是因为不同地区的系统可能会对日期格式有不同的解析逻辑,设置这个可以保证解析结果的一致性。另外compactMap会自动去掉转换失败的元素,如果你不想丢失原数据,可以把compactMap换成map,并把return nil改成return dateTimeStr。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:55:01