swift - 快速获取在线时间

标签 swift time

我的应用程序要求用户在线,并且即使用户更改日期,我也会尝试获取服务器时间。我找到了这段代码,它仅在我第一次运行该应用程序时才有效。然后下次它卡住时我必须更改网站。每次我更改网站时,它都会立即获取日期和时间,之后我会不断获得相同的准确时间。

代码:

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

最佳答案

最好使用 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()
}

关于swift - 快速获取在线时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54802774/

相关文章:

ios - Firestore 使用 for 循环查询多个文档

ios - Apple Pay iOS Swift 申请优惠券

search - 三元搜索算法的时间复杂度

java - 刷新文本/JLabel 值

c++ - 给定一个时间点,我如何获得自纪元以来的秒数?

ios - Swift 中的绘图应用程序

ios - Swift:当变量达到某个值时执行segue

macos - 打开 sqlite 文件 swift osx 应用程序并读取数据

r - 确定哪个id的时间点早于R中的另一个时间点

mysql - MySQL中的日期字段,查找所有不重叠的行并仅返回差异