Swift DateFormatter转换日期结果异常求助
问题分析与解决方案
嘿,这个坑我刚学Swift的时候也踩过!咱们来逐个解决你遇到的两个问题:
1. 日期解析错误(提前两个月)
你的DateFormatter格式符用错了,这是核心问题:
DD表示年中的第N天(比如1月1日是01,12月31日是365),而你要的是「月份里的日期」,应该用小写的ddYYYY表示基于周的年份(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
相关产品推荐
相关产品推荐

