DateFormatter 不转换特定日期 (Swift)

DateFormatter does NOT convert specific dates (Swift)

我在操场上有以下代码,应用程序和 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 进行测试...工作正常...

有人知道这是为什么吗?这是一个错误吗?

您的代码存在三个问题。首先 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"