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

如何将日期从dd/MM格式转换为dd/MM/yyyy并解决输出年份为2000的问题

问题原因

你的代码问题出在仅用dd/MM格式解析日期时,缺失的年份字段会被DateFormatter默认填充为2000年,这是iOS/macOS系统下日期解析的默认 fallback 规则,所以最终输出才会带上2000的年份。

  • 当dateFormat仅包含日月、不包含年份字段时,解析生成的Date对象会自动使用系统默认的参考年份2000补全缺失信息,这是你得到错误年份的直接原因
  • 你的代码没有手动指定需要填充的目标年份,直接使用了解析后的默认日期,导致年份不符合预期

修复方案

如果需求是将dd/MM格式的日期补全为当前年份的完整日期,可通过Calendar手动替换年份字段,参考代码如下:

let dateFormatter = DateFormatter()
// 固定解析用的locale,避免系统语言变化导致解析异常
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "dd/MM"

guard let partialDate = dateFormatter.date(from: "28/07") else {
    // 日期格式不匹配时的兜底逻辑
    return
}

let calendar = Calendar.current
// 获取当前年份
let currentYear = calendar.component(.year, from: Date())
// 替换日期的年份为当前年
guard let finalDate = calendar.date(bySetting: .year, value: currentYear, of: partialDate) else {
    return
}

// 输出最终格式
dateFormatter.dateFormat = "dd/MM/yyyy"
let finalDateStr = dateFormatter.string(from: finalDate)

如果需要补全为其他指定年份,只需要修改currentYear的赋值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:27:03