从Date转换为NSDate时崩溃

时间:2018-01-24 14:49:45

标签: ios swift time gmt

我在寻找获取当前时间的简单方法时发现了这个过时的问题( - > Swift get server time)。

我已将代码从( - > Answer)更新为当前的Swift版本,现在它看起来像这样:

func serverTimeReturn(completionHandler:@escaping (_ getResDate: NSDate?) -> Void){ 
    let url = NSURL(string: "http://www.google.com")
    let task = URLSession.shared.dataTask(with: url! as URL) {(data, response, error) in
        let httpResponse = response as? HTTPURLResponse
        if let contentType = httpResponse!.allHeaderFields["Date"] as? String {
            let dFormatter = DateFormatter()
            dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
            var serverTime = dFormatter.date(from: contentType)
            completionHandler(serverTime as! NSDate)
        }
    } 
    task.resume()
}

......打电话给......

serverTimeReturn { (getResDate) -> Void in
            var dFormatter = DateFormatter()
            dFormatter.dateStyle = DateFormatter.Style.long
            dFormatter.timeStyle = DateFormatter.Style.long
            dFormatter.timeZone = NSTimeZone(abbreviation: "GMT") as! TimeZone
            var dateGet = dFormatter.string(from: getResDate as! Date)

            print("Formatted Time : \(dateGet)")
}

但我仍然收到此错误消息:

Fatal error: Unexpectedly found nil while unwrapping an Optional value

- >在致电Thread 3: EXC_BREAKPOINT (code=1, subcode=xyz)

completionHandler(serverTime as! NSDate)

我不知道如何摆脱这个错误洙,任何帮助将非常感激!

2 个答案:

答案 0 :(得分:0)

根据你的说法,serverTime as! NSDate是造成致命错误的原因:所以你可能没有按照你设定的日期格式获得字符串日期contentType(“EEE,dd MMM yyyy HH:mm:ss Z“)。

设置日期格式化程序的日期格式,与您的contentType日期匹配。

contentType的结果是什么?

试试这个,让我知道日期字符串

if let contentType = httpResponse!.allHeaderFields["Date"] as? String {

        print("contentType - \(contentType)") // What is result of contentType here?
        let dFormatter = DateFormatter()
        dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
         // Update here - Use If-let block for NSDate casting and remove "as! NSDate" from completionHandler
        if let serverTime = dFormatter.date(from: contentType) as? NSDate {
           completionHandler(serverTime)
        }
}

以下答案可以帮助您,如何处理和使用日期格式化程序(它在Objective-c但帮助您):

另外,一看这个文件/链接:

修改 您的日期格式很好并且正常工作。

enter image description here

答案 1 :(得分:0)

经过多次尝试。我找到了解决方案。 只需添加以下代码行:

let Formatter = DateFormatter()
Formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale
Formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"

享受!