import Foundation
extension Date {
private static let processInfo = ProcessInfo()
private static var systemUptime: TimeInterval = 0
private static var serverTime: TimeInterval = 0
static func sycn(){
let url = URL(string: "https://work.weixin.qq.com")!
let task = URLSession.shared.dataTask(with: url) { (data: Data?, resp: URLResponse?, err: Error?) in
if let httpResp = resp as? HTTPURLResponse,
let dateStr = httpResp.allHeaderFields["Date"] as? String {
let serverDate: Date!
if let date = dateStr.dateValue(format: "EEE, dd MMM yyyy HH:mm:ss z") {
serverDate = date
} else if let date = dateStr.dateValue(format: "EEE, d MMM yyyy HH:mm:ss z") {
serverDate = date
} else if let date = dateStr.dateValue(format: "dd MMM yyyy HH:mm:ss") {
serverDate = date
} else if let date = dateStr.dateValue(format: "d MMM yyyy HH:mm:ss") {
serverDate = date
} else if let date = dateStr.dateValue(format: "dd MMM yyyy HH:mm") {
serverDate = date
} else if let date = dateStr.dateValue(format: "d MMM yyyy HH:mm") {
serverDate = date
} else {
return
}
// 互联网时间戳
serverTime = serverDate.timeIntervalSince1970
// 运行时间
systemUptime = processInfo.systemUptime
}
}
task.resume()
}
static var current: Date {
if serverTime == 0 {
if #available(iOS 15, *) {
return Date.now
} else {
return Date()
}
} else {
// 当前app运行时间 = (当前运行时间 - 旧运行时间)
// 当前时间 = 旧服务器时间 + app运行时间
// 当前时间 = 旧服务器时间 + (当前运行时间 - 旧运行时间)
let nowTimeInterval = serverTime + processInfo.systemUptime - systemUptime
return Date(timeIntervalSince1970: nowTimeInterval)
}
}
}
网友评论