Swift 如何正确地将日期转换为NSDate?(在展开可选值时意外发现nil)

Swift 如何正确地将日期转换为NSDate?(在展开可选值时意外发现nil),swift,nsdateformatter,Swift,Nsdateformatter,我正在从远程配置(一个字符串)中提取一个竞赛结束日期,并尝试将其转换为NSDate,以便在计时器中使用 let contestEndDateFormatter = DateFormatter() contestEndDateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" contestEndDate = contestEndDateFormatter.date(from: contestEndDateFromRemoteConfi

我正在从远程配置(一个字符串)中提取一个竞赛结束日期,并尝试将其转换为NSDate,以便在计时器中使用

    let contestEndDateFormatter = DateFormatter()
    contestEndDateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    contestEndDate = contestEndDateFormatter.date(from: contestEndDateFromRemoteConfig)! as NSDate
正如您在图中所看到的,字符串“2019-05-29 23:59:59”肯定在变量“ChallengedDateFromRemoteConfig”中(因此远程配置没有问题);然而,我显然做错了什么,因为它抛出了错误“在展开可选值时意外地发现了nil”

我相信dateFormat是正确的,并且与字符串匹配(这是类似stackoverflow问题的建议),因此这也不应该是问题所在

有人知道为什么这会抛出一个错误吗

提前感谢您的指导

试试这个:

var date = "2019-05-29 23:59:59"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")
let formattedDate = dateFormatter.date(from: date)

if let formattedDate = formattedDate {
    print(formattedDate)
}

1.不要强制转换到
NSDate
。将其保留为
日期
。2.将格式化程序的区域设置设置为
en\u US\u POSIX
。我似乎没有任何问题。可能按照rmaddy的建议使用
en_US_POSIX
。我也不认为尝试将结果转换为
NSDate
,这应该是可以互换的,你们都是天才。非常感谢。添加了challengedDateFormatter.locale=locale(标识符:“en_US_POSIX”),现在它工作得很好。是的,@MadProgrammer,当我在模拟器上运行它时,我也没有任何问题。只有在实际设备上进行测试时,才会发生错误。这不是问题的解决方案。