如何将字符串无错误地转换为不同的日期格式

How to convert string to a different date format without error

我在 NSUserDefaults 中以前版本的应用程序中保存了一个日期,以特定日期格式作为数组中的字符串。

我的问题是我的应用程序自该版本以来发生了很多变化,现在我想将保存的日期从以前的版本转换为我以后将使用的日期格式

这是我正在使用的代码。

if userDefault.objectForKey("day") == nil {
            return
        } else {
            // Add the first date created from previous version
            let day = userDefault.objectForKey("day") as? String
            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            let date: NSDate = dateFormatter.dateFromString(day!)!

错误'fatal error: unexpectedly found nil while unwrapping an Optional value'发生在这一行

let date: NSDate = dateFormatter.dateFromString(day!)!

线程 1:EXC_BREAKPOINT(代码=1....

您使用强制解包来解包但不确定dateFromString函数return值!= nil,这是引发异常的情况。

Trying to use ! to access a nonexistent optional value triggers a runtime error. Always make sure that an optional contains a non-nil value before using ! to force-unwrap its value.

您无法确保 userDefault.objectForKey("day") 始终存储日期字符串。 而你的存储字符串变成了格式? "yyyy-MM-dd HH:mm:ss"

你最好使用可选绑定解包以确保数据不是 nil 或有效格式

if let day = userDefault.objectForKey("day") as? String {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    if let date = dateFormatter.dateFromString(day) {
        // convert success
        print(date)
    }
}