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

iOS中24小时制转12小时制格式转换失败问题求助

解决DateFormatter转换12小时制失效的问题

我之前也碰到过一模一样的问题,核心原因是系统Locale的时间偏好干扰了你设置的格式规则。你当前用的Locale.current如果是印度地区的(对应Asia/Kolkata时区),它默认是24小时制的时间偏好,这会让你指定的hh(12小时制小时)和a(AM/PM标识)没有按预期生效,所以才会出现转换后还是24小时的情况。

快速解决方法

给负责输出格式的DateFormatter设置一个专门用于固定格式处理的Locale——en_US_POSIX,这个Locale不会受系统地区设置影响,能严格遵循你指定的dateFormat规则:

let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy hh:mm a"
formatter.timeZone = TimeZone(identifier: "Asia/Kolkata")
// 关键修改:强制使用en_US_POSIX确保12小时制规则生效
formatter.locale = Locale(identifier: "en_US_POSIX")
let convertedDateString = formatter.string(from: DATE_OBJECT)

用这段代码处理你的示例日期2019-01-08 14:01:04,就能得到预期的01/08/2019 02:01 PM。

额外注意事项

  • 如果你是先从yyyy-MM-dd HH:mm:ss字符串解析得到DATE_OBJECT,那解析用的DateFormatter也建议设置en_US_POSIX作为Locale,避免因系统地区差异导致解析出错。
  • Locale.current只适合做本地化适配显示(比如根据用户地区自动切换日期格式),如果需要固定格式的日期转换,一定要用en_US_POSIX这类中立Locale。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:48:21