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

Swift DateFormatter转换日期结果异常求助

问题分析与解决方案

嘿,这个坑我刚学Swift的时候也踩过!咱们来逐个解决你遇到的两个问题:

1. 日期解析错误(提前两个月)

你的DateFormatter格式符用错了,这是核心问题:

  • DD 表示年中的第N天(比如1月1日是01,12月31日是365),而你要的是「月份里的日期」,应该用小写的 dd
  • YYYY 表示基于周的年份(Week-based Year),它的计算是按周分组的,比如2022年的第一周可能从2021年12月27日开始,这就导致你解析出来的日期提前了。我们日常用的公历年应该用小写的 yyyy

所以正确的日期格式字符串应该是:"dd-MM-yyyy-HH:mm"

2. 打印结果格式不符

你打印的startDate是Date类型的对象,它本质上是一个时间戳,本身没有固定格式。系统默认打印时会用UTC时区的ISO格式输出。如果想要按照你预期的格式显示,需要再用DateFormatter把Date对象转回字符串。

修正后的完整代码

let startDateString = "20-02-2022-15-00"
print(startDateString)

let dateFormatter = DateFormatter()
// 修正格式符:dd(月内日期)、yyyy(公历年)
dateFormatter.dateFormat = "dd-MM-yyyy-HH:mm"
dateFormatter.timeZone = TimeZone.current

if let startDate = dateFormatter.date(from: startDateString) {
    // Date对象默认UTC打印,这是正常的
    print("原始Date对象(UTC时区显示):\(startDate)")
    // 按自定义格式转回字符串输出
    let formattedOutput = dateFormatter.string(from: startDate)
    print("格式化后的日期:\(formattedOutput)")
} else {
    print("日期解析失败,请检查输入格式")
}

运行这段代码后,你会得到正确的解析结果,也能按预期格式输出日期啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:23:14