首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迅速获得在线时间

迅速获得在线时间
EN

Stack Overflow用户
提问于 2019-02-21 08:49:18
回答 1查看 704关注 0票数 0

我的应用程序要求用户在线,并试图获得服务器的时间,即使用户改变了他们的日期。我找到了这段代码,它只在我第一次运行这个应用程序时才起作用。然后,下一次,它冻结,我必须改变网站。每次我改变网站,它得到的日期和时间后,我一直得到相同的确切时间。

代码:

代码语言:javascript
复制
func getTimeFromServer(completionHandler:@escaping (_ getResDate: Date?) -> Void){
    let url = URL(string: "https://www.apple.com")
    let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in
        let httpResponse = response as? HTTPURLResponse
        if let contentType = httpResponse!.allHeaderFields["Date"] as? String {
            //print(httpResponse)
            let dFormatter = DateFormatter()
            dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
            let serverTime = dFormatter.date(from: contentType)
            completionHandler(serverTime)
        }
    }
    task.resume()
}
EN

回答 1

Stack Overflow用户

发布于 2019-02-21 09:15:10

使用NTP服务器仍然更好,但是尝试使用以下方法,这将忽略缓存:

代码语言:javascript
复制
func getTimeFromServer(completionHandler:@escaping (_ getResDate: Date?) -> Void){
    let url = URL(string: "https://www.apple.com")
    let urlRequest = URLRequest(url: url!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 20)
    let task = URLSession.shared.dataTask(with: urlRequest) {(data, response, error) in
        let httpResponse = response as? HTTPURLResponse
        if let contentType = httpResponse!.allHeaderFields["Date"] as? String {
            //print(httpResponse)
            let dFormatter = DateFormatter()
            dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
            let serverTime = dFormatter.date(from: contentType)
            completionHandler(serverTime)
        }
    }
    task.resume()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54802774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档