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

Swift:如何将指定格式的Date转换为目标格式Date(一行代码实现)

实现指定格式Date的“年月日截断”(一行代码方案)

嘿,先帮你澄清一个关键误区:Date类型本身是没有格式的——它本质上只是一个代表某个时间点的时间戳,所谓的"yyyy-MM-dd'T'HH:mm:ssZ"或者"yyyy-MM-dd"都是我们把Date转换成String时才会用到的显示格式。你真正需要的应该是:把一个包含时分秒的原始Date,转换成仅保留年月日部分(时分秒清零)的Date对象,对吧?

一行代码实现方案

直接用Calendar的startOfDay(for:)方法就能搞定,它会把传入的Date的时分秒、毫秒等所有小于“天”的时间单位都清零,得到当天的起始时刻(也就是你要的“仅保留年月日”的Date):

let truncatedDate = Calendar.current.startOfDay(for: originalDate)

如果你的原始Date是从"yyyy-MM-dd'T'HH:mm:ssZ"格式的字符串解析来的,也可以把解析和截断合并成一行(注意:这里用了强制解包,实际开发中建议用可选绑定处理解析失败的情况):

let targetDate = Calendar.current.startOfDay(for: DateFormatter(dateFormat: "yyyy-MM-dd'T'HH:mm:ssZ").date(from: yourInputString)!)

更安全的一行写法(处理解析失败的可选值):

let targetDate = yourInputString.flatMap { DateFormatter(dateFormat: "yyyy-MM-dd'T'HH:mm:ssZ").date(from: $0) }.map { Calendar.current.startOfDay(for: $0) }

补充说明

如果你之后需要把这个截断后的Date转换成"yyyy-MM-dd"格式的字符串,只需要再用一次DateFormatter即可,但这一步是转成String,不是Date类型:

let dateString = DateFormatter(dateFormat: "yyyy-MM-dd").string(from: truncatedDate)

内容的提问来源于stack exchange,提问作者Ali Ihsan URAL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:59:39