如何将日期从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
相关产品推荐
相关产品推荐

