美文网首页
[Swift] 客户端与服务端时间同步

[Swift] 客户端与服务端时间同步

作者: 巨馍蘸酱 | 来源:发表于2023-03-22 19:21 被阅读0次

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

相关文章

  • swift与js特殊需求交互

    1.swift调用js 2.js调用swift 客户端定义好方法,并且与服务端约定好协议 scheme+host+...

  • Debian9配置Sersync+rsync,自动同步

    Debian9配置Sersync+rsync 目标:将同步服务端的数据实时同步到客户端 同步客户端配置rsync ...

  • http 三次握手 和 四次挥手

    三次握手 1.由客户端向服务端发送 SYN 同步报文。 2.当服务端收到 SYN 同步报文之后,会返回给客户端 S...

  • swift-https的支持

    swift中,如何支持https呢? https分为单向(客户端校验服务端)的和双向(客户端/服务端相互校验)具体...

  • Vapor - 用Swift编写你的App后台

    Swift 服务端 Swfit既可以作为客户端编写语言,又可以编写服务端语言,对于使用Swift语言开发iOS应用...

  • 同步与异步,阻塞与非阻塞

    同步与异步: 客户端,服务端协商的方式:如果直到做完才通知,那么是同步。如果马上返回,做完后再通知,则是异步 重点...

  • 1.zabbix+agent安装配置

    一、 环境准备 hosts解析文件 服务端 客户端 配置yum源 时间同步 二、服务端安装 1.数据库配置安装配置...

  • 3.创建server和client

    一.创建服务端 二.创建同步客户端 同步client是同步阻塞的。一整套connect->send()->rev(...

  • TCP握手原理

    客户端向服务端发起连接请求,带上SYN(value1)同步标记 服务端收到客户端的请求,给与回复ACK(value...

  • NTP时间同步服务搭建以及同步服务器时间

    1.服务端,安装ntp 2.查看运行状态 查看结果如下说明正常: 3.客户端同步服务端时间 4.更改服务器时间

网友评论

      本文标题:[Swift] 客户端与服务端时间同步

      本文链接:https://www.haomeiwen.com/subject/ysdbrdtx.html