一、簡介
TimeZone定義了時(shí)區(qū)的行為,時(shí)區(qū)值表示相對格林威治標(biāo)準(zhǔn)時(shí)間(GMT)的時(shí)間偏移量(正或負(fù))。
請注意,America/Los_Angeles是時(shí)區(qū)的ID,而不是名稱。時(shí)區(qū)名稱的示例是Pacific Daylight Time。
二、API
- 獲取系統(tǒng)當(dāng)前使用的時(shí)區(qū)
- 當(dāng)前時(shí)區(qū)
public static var current: TimeZone { get }
var tz = TimeZone.current
print(tz)
//Asia/Shanghai (current)
- 當(dāng)前時(shí)區(qū)
該方法會(huì)自動(dòng)跟蹤用戶所做的更新。
public static var autoupdatingCurrent: TimeZone { get }
var tz = TimeZone.autoupdatingCurrent
print(tz)
//Asia/Shanghai (autoupdatingCurrent)
- 初始化
- 通過id
public init?(identifier: String)
系統(tǒng)自帶的id可通過knownTimeZoneIdentifiers方法獲取。
var tz = TimeZone(identifier: "Asia/Shanghai")
print(tz)
//Optional(Asia/Shanghai (current))
- 通過相對于格林尼治標(biāo)準(zhǔn)時(shí)間(GMT)的偏移量
public init?(secondsFromGMT seconds: Int)
中國屬于東八區(qū),則偏移8個(gè)小時(shí)。
var tz = TimeZone(secondsFromGMT: 3600*8)
print(tz)
//Optional(GMT+0800 (fixed))
- 通過縮寫
public init?(abbreviation: String)
通常,不鼓勵(lì)使用縮寫,除了GMT之類的獨(dú)特實(shí)例。時(shí)區(qū)縮寫不是標(biāo)準(zhǔn)化的,因此給定的縮寫可能具有多種含義。例如,EST是指美國和澳大利亞的東部時(shí)間。
系統(tǒng)自帶的縮寫可通過abbreviationDictionary方法獲取。
var tz = TimeZone(abbreviation: "HKT")
print(tz)
//Optional(Asia/Hong_Kong (fixed))
- 獲取時(shí)區(qū)的id
public var identifier: String { get }
public init?(identifier: String)可使用該id初始化。
var tz = TimeZone.current
print(tz.identifier)
//Asia/Shanghai
- 獲取相對于格林尼治標(biāo)準(zhǔn)時(shí)間(GMT)的時(shí)間偏移量
public func secondsFromGMT(for date: Date = Date()) -> Int
public init?(secondsFromGMT seconds: Int)可使用該偏移量初始化。
var tz = TimeZone.current
print(tz.secondsFromGMT())
//28800
- 獲取時(shí)區(qū)的縮寫
public func abbreviation(for date: Date = Date()) -> String?
public init?(abbreviation: String)可通過該縮寫初始化。
請注意,縮寫在不同的日期可能有所不同。例如,在夏令時(shí)期間,US/Eastern時(shí)區(qū)的縮寫為EDT。在其他時(shí)候,它的縮寫是EST。
var tz = TimeZone.current
print(tz.abbreviation())
//Optional("GMT+8")
- 夏令時(shí)
夏令時(shí)又稱“經(jīng)濟(jì)時(shí)”或“日光節(jié)約時(shí)”。法定時(shí)的一種。在夏季,由于晝長夜短,為充分利用日光,把時(shí)鐘適當(dāng)撥快;到秋季,再撥回。1908年由英國人威利特提出。1916年后,德國、奧地利、荷蘭及丹麥等國相繼采用。中國也曾采用過。
- 是否在指定日期使用夏令時(shí)
public func isDaylightSavingTime(for date: Date = Date()) -> Bool
var tz = TimeZone.current
print(tz.isDaylightSavingTime())
//false
- 獲取指定日期的夏令時(shí)偏移量
public func daylightSavingTimeOffset(for date: Date = Date()) -> TimeInterval
中國未使用夏令時(shí),因此偏移量為0。
var tz = TimeZone.current
print(tz.daylightSavingTimeOffset())
//0.0
- 獲取指定日期之后的下一個(gè)夏令時(shí)過渡的日期
public func nextDaylightSavingTimeTransition(after date: Date) -> Date?
若未使用夏令時(shí),則返回nil。
var tz = TimeZone.current
print(tz.nextDaylightSavingTimeTransition(after: Date()))
//nil
- 獲取當(dāng)前日期之后的下一個(gè)夏令時(shí)過渡的日期
public var nextDaylightSavingTimeTransition: Date? { get }
若未使用夏令時(shí),則返回nil。
var tz = TimeZone.current
print(tz.nextDaylightSavingTimeTransition)
//nil
- 獲取系統(tǒng)已知的所有時(shí)區(qū)的id
public static var knownTimeZoneIdentifiers: [String] { get }
print(TimeZone.knownTimeZoneIdentifiers)
//["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers",
//"Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau",
//"Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo",
- 獲取縮寫與時(shí)區(qū)id的映射字典
public static var abbreviationDictionary: [String : String]
print(TimeZone.abbreviationDictionary)
//["CLST": "America/Santiago", "PHT": "Asia/Manila", "PET": "America/Lima",
//"COT": "America/Bogota", "MDT": "America/Denver", "MSD": "Europe/Moscow",
//"NST": "America/St_Johns", "EEST": "Europe/Athens", "BRT":"America/Sao_Paulo"
- 獲取時(shí)區(qū)數(shù)據(jù)的版本
public static var timeZoneDataVersion: String { get }
print(TimeZone.timeZoneDataVersion)
//2020d
- 獲取指定語言環(huán)境本地化的時(shí)區(qū)名稱
public func localizedName(for style: NSTimeZone.NameStyle, locale: Locale?) -> String?
public enum NameStyle : Int {
case standard = 0//標(biāo)準(zhǔn)
case shortStandard = 1
case daylightSaving = 2//夏令時(shí)
case shortDaylightSaving = 3
case generic = 4//通用
case shortGeneric = 5
}
var tz = TimeZone.current
print(tz.localizedName(for: .standard, locale: Locale(identifier: "zh")))
//Optional("中國標(biāo)準(zhǔn)時(shí)間")