我的应用程序要求用户在线,并试图获得服务器的时间,即使用户改变了他们的日期。我找到了这段代码,它只在我第一次运行这个应用程序时才起作用。然后,下一次,它冻结,我必须改变网站。每次我改变网站,它得到的日期和时间后,我一直得到相同的确切时间。
代码:
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()
}发布于 2019-02-21 09:15:10
使用NTP服务器仍然更好,但是尝试使用以下方法,这将忽略缓存:
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()
}https://stackoverflow.com/questions/54802774
复制相似问题