如何将字符串转换为不同的日期格式而不会出错

时间:2016-07-13 03:22:37

标签: ios swift string nsdate

我在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!)!

错误'致命错误:在展开可选值时意外发现nil'出现在此行

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

主题1:EXC_BREAKPOINT(代码= 1 ....

1 个答案:

答案 0 :(得分:1)

您使用强制解包来展开但不确定dateFromString函数的返回值!= nil,它会引发异常。

  

尝试使用!访问不存在的可选值会触发a   运行时错误。始终确保可选项包含非零值   使用前的价值!强行解开它的价值。

您无法确保userDefault.objectForKey("day")随时都存储字符串。 你的存储字符串是否格式化? "yyyy-MM-dd HH:mm:ss"

您最好打开使用可选绑定以确保数据不是零或有效格式

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)
    }
}