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

如何将DateFormatter日期输出中的'at'替换为逗号?

解决DateFormatter自动添加'at'并替换为逗号的问题

问题原因

你遇到的情况是因为setLocalizedDateFormatFromTemplate方法会遵循当前区域的本地化规则自动调整日期与时间的分隔符,模板中的逗号并不会被强制保留。当使用不含年份的短日期模板时,英文区域这类场景的默认规则会用'at'分隔日期和时间,而包含年份的长日期模板则会使用逗号,这就是另一种格式能正常工作的原因。

解决方案

方案1:直接设置dateFormat(推荐)

放弃使用setLocalizedDateFormatFromTemplate,直接通过dateFormat属性定义固定格式,完全控制输出样式,不受本地化规则干扰:

let formatter = DateFormatter()
// 设置目标区域,确保格式符合预期
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "E, MMM d, h:mma"
formatter.amSymbol = "am"
formatter.pmSymbol = "pm"

// 输出示例:"Mon, Oct 10, 11:22 am"
let result = formatter.string(from: Date())

方案2:替换格式化后的字符串(应急方案)

如果必须保留setLocalizedDateFormatFromTemplate的使用,可以在格式化完成后将'at'替换为逗号。注意这个方法仅适用于固定区域场景,不同区域的分隔符可能不同:

let formatter = DateFormatter(withLocalizedLocale: "E, MMM d, h:mma")
formatter.amSymbol = "am"
formatter.pmSymbol = "pm"

let rawString = formatter.string(from: Date())
let result = rawString.replacingOccurrences(of: " at ", with: ", ")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:40:28