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
相关产品推荐
相关产品推荐

