iOS 開發(fā)中我們經(jīng)常用到獲取系統(tǒng)時(shí)間,正常來說驰徊,我們只需要調(diào)用系統(tǒng)API即可
let currentDate = Date()
let formatter = DateFormatter()
// 系統(tǒng)設(shè)置時(shí)區(qū)
formatter.timeZone = TimeZone.current
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss,EEE"
print(formatter.string(from: currentDate))
但是這種獲取方式在用戶修改了時(shí)間或者修改了時(shí)區(qū)后,我們?cè)佾@取的話就會(huì)有誤差
如何解決呢,主要有兩種方式
- 服務(wù)器接口獲取
- 通過 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
// 容錯(cuò)處理不做介紹了士聪,直接獲取
let httpResponse: HTTPURLResponse = response as! HTTPURLResponse
// 打印獲取的數(shù)據(jù)锦援,打印結(jié)果在下方
print(httpResponse.allHeaderFields)
let httpValue: [AnyHashable:Any] = httpResponse.allHeaderFields
let date = httpValue["Date"] as? String
if let dateValue = date {
// 時(shí)間格式
let formatter = DateFormatter()
formatter.timeZone = TimeZone.init(abbreviation: "GMT")
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzzz"
// 為了簡(jiǎn)單直接強(qiáng)解了
let formatterDate = formatter.date(from: dateValue)!
print("獲取到的時(shí)間\(formatterDate)")
// 自行處理時(shí)間,這里直接轉(zhuǎn)成東八區(qū)了
formatter.timeZone = TimeZone(abbreviation: "GMT+0800")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let cnTime = formatter.string(from: formatterDate)
print("轉(zhuǎn)換國(guó)內(nèi)時(shí)間\(cnTime)")
}
}
task.resume()
返回 response 結(jié)果如下剥悟,清除了部分無用信息
{
"Cache-Control" = "max-age=120";
"Content-Encoding" = gzip;
"Content-Length" = 10360;
"Content-Type" = "text/html";
Date = "Thu, 03 Mar 2022 09:42:57 GMT";
}
通過方式二獲取到的時(shí)間及系統(tǒng)Date()獲取結(jié)果對(duì)比
修改系統(tǒng)時(shí)區(qū)及時(shí)間后,Date()獲攘樗隆:2022-03-01 02:49:20,Tue
通過方式二獲取到的時(shí)間: 2022-03-03 09:49:59 +0000
通過方式二轉(zhuǎn)換國(guó)內(nèi)時(shí)間: 2022-03-03 17:49:59