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

