美文网首页收藏APP & program
iOS 获取服务器时间问题

iOS 获取服务器时间问题

作者: 随缘吖 | 来源:发表于2022-03-03 17:56 被阅读0次

    iOS 开发中我们经常用到获取系统时间,正常来说,我们只需要调用系统API即可

    let currentDate = Date()
    let formatter = DateFormatter()
    // 系统设置时区
    formatter.timeZone = TimeZone.current
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss,EEE"
    print(formatter.string(from: currentDate))
    

    但是这种获取方式在用户修改了时间或者修改了时区后,我们再获取的话就会有误差

    如何解决呢,主要有两种方式

    • 服务器接口获取
    • 通过 URLSession 获取

    第一种方式我们就不多说了,主要介绍一下第二种方法,直接上代码

    let url = URL(string: "https://www.sina.com")
    guard let url = url else { return  }
    let request = URLRequest(url: url)
    
    let session = URLSession.shared
    let task = session.dataTask(with: request) { (dataValue, response, error) in
        // 容错处理不做介绍了,直接获取
        let httpResponse: HTTPURLResponse = response as! HTTPURLResponse
        
        // 打印获取的数据,打印结果在下方
        print(httpResponse.allHeaderFields) 
      
        let httpValue: [AnyHashable:Any] = httpResponse.allHeaderFields
        let date = httpValue["Date"] as? String
        if let dateValue = date {
            // 时间格式
            let formatter = DateFormatter()
            formatter.timeZone = TimeZone.init(abbreviation: "GMT")
            formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzzz"
           
            // 为了简单直接强解了
            let formatterDate =  formatter.date(from: dateValue)!
            print("获取到的时间\(formatterDate)")
          
            // 自行处理时间,这里直接转成东八区了
            formatter.timeZone = TimeZone(abbreviation: "GMT+0800")
            formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            let cnTime = formatter.string(from: formatterDate)
            print("转换国内时间\(cnTime)")
        }
    }
    task.resume()
    

    返回 response 结果如下,清除了部分无用信息

    {
        "Cache-Control" = "max-age=120";
        "Content-Encoding" = gzip;
        "Content-Length" = 10360;
        "Content-Type" = "text/html";
        Date = "Thu, 03 Mar 2022 09:42:57 GMT";
    }
    

    通过方式二获取到的时间及系统Date()获取结果对比

    修改系统时区及时间后,Date()获取:2022-03-01 02:49:20,Tue
    
    通过方式二获取到的时间:         2022-03-03 09:49:59 +0000
    
    通过方式二转换国内时间:         2022-03-03 17:49:59
    

    相关文章

      网友评论

        本文标题:iOS 获取服务器时间问题

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