最近遇到在項目的一些接口請求中叙身,需要帶格式化好的日期參數(shù) date: "2020-09-18"
(怎么都感覺用時間戳合適), 然后又因為本地數(shù)據(jù)庫有存儲數(shù)據(jù)對應的時間戳已骇,所以在格式轉(zhuǎn)化與獲取時間戳中遇到讓我感覺懵懵的情況。因此查了一些資料孤荣,做一份筆記在此隅居,以后方便查閱。
GMT:Greenwich Mean Time 格林尼治標準時間
UTC:Coordinated Universal Time 協(xié)調(diào)世界時
GMT = UTC+0
北京時區(qū):GMT+8
// 時間戳是UTC到1970的 時間戳
// 格林時區(qū) date: 2020-09-18 16:05:41 +0000 日期與當前時間少了8小時
// seconds:1600445141.265026 時間戳正常
var date = Date()
print("格林時區(qū) date: \(date)")
print("seconds:\(date.timeIntervalSince1970)")
1瞎惫、將日期轉(zhuǎn)成當前時區(qū)的日期
用北京時區(qū)日期 取時間戳會多出 8小時
// 轉(zhuǎn)成北京時區(qū) date: 2020-09-19 00:05:41 +0000 日期正常
// seconds:1600473941.265026 時間戳多了8小時
date = Date.dateFromGMT(date)
print("轉(zhuǎn)成北京時區(qū) date: \(date)")
print("seconds:\(date.timeIntervalSince1970)")
extension Date {
// 轉(zhuǎn)成當前時區(qū)的日期
static func dateFromGMT(_ date: Date) -> Date {
let secondFromGMT: TimeInterval = TimeInterval(TimeZone.current.secondsFromGMT(for: date))
return date.addingTimeInterval(secondFromGMT)
}
}
2溜腐、日期字符串 轉(zhuǎn)成 Date 格式
String 轉(zhuǎn)Date 會有8小時的差值,但是轉(zhuǎn)成時間戳卻是正常的瓜喇。這個時候如果要顯示正常的日期第1點的方式
挺益,然后又要轉(zhuǎn)成時間戳存儲在本地時,一定要減去8小時的差值
// 轉(zhuǎn)換:String轉(zhuǎn)Date date: 2020-09-18 16:05:41 +0000 日期少了8小時
// seconds:1600445141.270848 時間戳正常
let dateString = "2020-09-18"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMdd"
date = dateFormatter.date(from: dateString) ?? Date()
print("轉(zhuǎn)換:String轉(zhuǎn)Date date: \(date)")
print("seconds:\(date.timeIntervalSince1970)")