美文网首页收藏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 获取服务器时间问题

    iOS 开发中我们经常用到获取系统时间,正常来说,我们只需要调用系统API即可 但是这种获取方式在用户修改了时间或...

  • IOS开发小记

    1.对服务器进行Https请求 -服务器:获取证书后需提供文件***.pem文件给IOS开发 -IOS开发:将得到...

  • ios Crash闪退日志获取和上传至服务器(NSSetUnca

    ios Crash闪退日志获取和上传至服务器(NSSetUncaughtExceptionHandler)上线iO...

  • 通过Safari与mobileconfig获取iOS设备UDID

    一、通过苹果Safari浏览器获取iOS设备UDID步骤 苹果公司允许开发者通过IOS设备和Web服务器之间的某个...

  • AVPlayer 获取时间问题

    使用 AVPlayer 获取播放的时间和播放的总时间,在使用的时候踩到一些坑在这总结一下 获取已经播放的时间 获取...

  • IOS和Android下汇总

    项目问题 IOS下 时间问题: '2019-01-04' 在ios下不能被解析, '2019/01/04'才行 ...

  • iOS时间问题

    在iOS开发中,经常会遇到各种各样的时间问题,8小时时差,时间戳,求时间间隔,农历等等。解决办法网上比比皆是,但大...

  • iOS时间问题

    在iOS开发中,经常会遇到各种各样的时间问题,8小时时差,时间戳,求时间间隔,农历等等。解决办法网上比比皆是,但大...

  • 微信第三方登录

    一、第一步请求微信API获取code,让前端安卓or IOS获取code; 二、第二步根据code,自己后台服务器...

  • iOS-微信支付(二)-了解服务器签名、加密

    一、声明: 一般微信支付签名、加密都在服务器端做的,在iOS中只需要调用服务器的接口获取(partnerid、pr...

网友评论

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

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