DateFormatter 不转换特定日期 (Swift)
Posted
技术标签:
【中文标题】DateFormatter 不转换特定日期 (Swift)【英文标题】:DateFormatter does NOT convert specific dates (Swift) 【发布时间】:2021-09-16 21:27:10 【问题描述】:我在操场和应用程序上有以下代码,而 DateFormatter 仅针对日期“1990-10-21”返回 nil:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd"
let date1 = dateFormatter.date(from: "1990-10-20") // "Oct 20, 1990 at 12:00 AM"
let date2 = dateFormatter.date(from: "1990-10-21") // nil
let date3 = dateFormatter.date(from: "1990-10-22") // "Oct 22, 1990 at 12:00 AM"
在 1989 年、2021 年进行测试...运行良好...
有没有人知道这是为什么?是bug吗?
【问题讨论】:
【参考方案1】:您的代码存在三个问题。第一个YYYY
是YearForWeekOfYear
。你需要的是yyyy
。其次,你没有打发时间。请注意,并非所有日期都从 12:00am
(夏令时转换日期)开始。您可以通过设置日历或将有效时间(下午 12 点)与日期一起传递来防止日期格式化程序返回 nil
。第三,在使用固定日期格式时,您应该始终将语言环境设置为 "en_US_POSIX"
:
let dateFormatter = DateFormatter()
dateFormatter.calendar = .current
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd"
let date1 = dateFormatter.date(from: "1990-10-20") // "Oct 20, 1990 at 12:00 AM"
let date2 = dateFormatter.date(from: "1990-10-21") // "Oct 21, 1990 at 1:00 AM"
let date3 = dateFormatter.date(from: "1990-10-22") // "Oct 22, 1990 at 12:00 AM"
【讨论】:
我在我的代码上使用了语言环境,只是在此处和操场上删除了,因为它不会影响问题。我尝试了yyyy,但它也没有影响问题,但我明白你的意思,我会继续使用yyyy。设置日历是我从未尝试解决的问题。谢谢 YYYY 在接近新年的日期会给你错误的结果以上是关于DateFormatter 不转换特定日期 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
当我在英国地区将字符串转换为日期并且时区是马斯喀特时,DateFormatter 给了我不正确的结果
字符串到日期的转换有时会使用 DateFormatter 返回 nil
Swift DateFormatter 不会根据预设的 Dateformat 转换日期