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

