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

如何将"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:11