如何将"2018-04-03 22:10:06"类日期转为"Tue Apr 3 22:10:06 2018"格式?
Swift日期格式转换:从"yyyy-MM-dd HH:mm:ss"到"EEE MMM d HH:mm:ss yyyy"
嘿,我帮你搞定这个格式转换的问题!其实核心就是用两个DateFormatter:一个用来解析原始的日期字符串,另一个用来生成你想要的目标格式。关键是要准确对应日期格式的占位符,还要注意区域设置避免出现非英文的缩写。
完整代码示例
import Foundation // 你的原始日期字符串(可以替换成任意符合格式的日期) let rawDateString = "2018-04-03 22:10:06" // 1. 初始化解析用的DateFormatter let inputFormatter = DateFormatter() inputFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" // 设置en_US_POSIX确保解析不受系统区域影响,避免因用户设置导致解析失败 inputFormatter.locale = Locale(identifier: "en_US_POSIX") // 解析原始字符串为Date对象 guard let parsedDate = inputFormatter.date(from: rawDateString) else { print("⚠️ 无法解析输入的日期字符串,请检查格式是否正确") exit(1) } // 2. 初始化格式化用的DateFormatter let outputFormatter = DateFormatter() // 对应目标格式:Tue Apr 3 22:10:06 2018 outputFormatter.dateFormat = "EEE MMM d HH:mm:ss yyyy" // 指定英文区域,确保星期和月份是英文缩写 outputFormatter.locale = Locale(identifier: "en_US") // 生成目标格式的字符串 let formattedDateString = outputFormatter.string(from: parsedDate) print(formattedDateString) // 输出:Tue Apr 3 22:10:06 2018
关键格式占位符说明
EEE:星期的3字母缩写(比如Tue、Wed)MMM:月份的3字母缩写(比如Apr、Oct)d:不带前导零的日期数字(比如3、12,而不是03、12)yyyy:4位完整年份HH:mm:ss:24小时制的时分秒
注意事项
- 解析时一定要设置
locale = Locale(identifier: "en_US_POSIX"),这是一个固定的、不受用户系统设置影响的区域,能保证对yyyy-MM-dd HH:mm:ss这种标准格式的解析不会出错。 - 格式化时设置
locale = Locale(identifier: "en_US")是为了确保星期和月份的缩写是英文的,如果系统默认区域是中文,不设置的话会得到“周二 四月”这类结果,不符合你的需求。
内容的提问来源于stack exchange,提问作者gooberboobbutt
相关产品推荐
相关产品推荐

