IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS 获取系统时间问题 -> 正文阅读

[移动开发]iOS 获取系统时间问题

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
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:12:56  更:2022-03-06 13:15:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:20:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码