一、简介
TimeZone定义了时区的行为,时区值表示相对格林威治标准时间(GMT)的时间偏移量(正或负)。
请注意,America/Los_Angeles是时区的ID,而不是名称。时区名称的示例是Pacific Daylight Time。
二、API
- 获取系统当前使用的时区
- 当前时区
public static var current: TimeZone { get }
var tz = TimeZone.current
print(tz)
//Asia/Shanghai (current)
- 当前时区
该方法会自动跟踪用户所做的更新。
public static var autoupdatingCurrent: TimeZone { get }
var tz = TimeZone.autoupdatingCurrent
print(tz)
//Asia/Shanghai (autoupdatingCurrent)
- 初始化
- 通过id
public init?(identifier: String)
系统自带的id可通过knownTimeZoneIdentifiers
方法获取。
var tz = TimeZone(identifier: "Asia/Shanghai")
print(tz)
//Optional(Asia/Shanghai (current))
- 通过相对于格林尼治标准时间(GMT)的偏移量
public init?(secondsFromGMT seconds: Int)
中国属于东八区,则偏移8个小时。
var tz = TimeZone(secondsFromGMT: 3600*8)
print(tz)
//Optional(GMT+0800 (fixed))
- 通过缩写
public init?(abbreviation: String)
通常,不鼓励使用缩写,除了GMT之类的独特实例。时区缩写不是标准化的,因此给定的缩写可能具有多种含义。例如,EST是指美国和澳大利亚的东部时间。
系统自带的缩写可通过abbreviationDictionary
方法获取。
var tz = TimeZone(abbreviation: "HKT")
print(tz)
//Optional(Asia/Hong_Kong (fixed))
- 获取时区的id
public var identifier: String { get }
public init?(identifier: String)
可使用该id初始化。
var tz = TimeZone.current
print(tz.identifier)
//Asia/Shanghai
- 获取相对于格林尼治标准时间(GMT)的时间偏移量
public func secondsFromGMT(for date: Date = Date()) -> Int
public init?(secondsFromGMT seconds: Int)
可使用该偏移量初始化。
var tz = TimeZone.current
print(tz.secondsFromGMT())
//28800
- 获取时区的缩写
public func abbreviation(for date: Date = Date()) -> String?
public init?(abbreviation: String)
可通过该缩写初始化。
请注意,缩写在不同的日期可能有所不同。例如,在夏令时期间,US/Eastern时区的缩写为EDT。在其他时候,它的缩写是EST。
var tz = TimeZone.current
print(tz.abbreviation())
//Optional("GMT+8")
- 夏令时
夏令时又称“经济时”或“日光节约时”。法定时的一种。在夏季,由于昼长夜短,为充分利用日光,把时钟适当拨快;到秋季,再拨回。1908年由英国人威利特提出。1916年后,德国、奥地利、荷兰及丹麦等国相继采用。中国也曾采用过。
- 是否在指定日期使用夏令时
public func isDaylightSavingTime(for date: Date = Date()) -> Bool
var tz = TimeZone.current
print(tz.isDaylightSavingTime())
//false
- 获取指定日期的夏令时偏移量
public func daylightSavingTimeOffset(for date: Date = Date()) -> TimeInterval
中国未使用夏令时,因此偏移量为0。
var tz = TimeZone.current
print(tz.daylightSavingTimeOffset())
//0.0
- 获取指定日期之后的下一个夏令时过渡的日期
public func nextDaylightSavingTimeTransition(after date: Date) -> Date?
若未使用夏令时,则返回nil。
var tz = TimeZone.current
print(tz.nextDaylightSavingTimeTransition(after: Date()))
//nil
- 获取当前日期之后的下一个夏令时过渡的日期
public var nextDaylightSavingTimeTransition: Date? { get }
若未使用夏令时,则返回nil。
var tz = TimeZone.current
print(tz.nextDaylightSavingTimeTransition)
//nil
- 获取系统已知的所有时区的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",
- 获取缩写与时区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"
- 获取时区数据的版本
public static var timeZoneDataVersion: String { get }
print(TimeZone.timeZoneDataVersion)
//2020d
- 获取指定语言环境本地化的时区名称
public func localizedName(for style: NSTimeZone.NameStyle, locale: Locale?) -> String?
public enum NameStyle : Int {
case standard = 0//标准
case shortStandard = 1
case daylightSaving = 2//夏令时
case shortDaylightSaving = 3
case generic = 4//通用
case shortGeneric = 5
}
var tz = TimeZone.current
print(tz.localizedName(for: .standard, locale: Locale(identifier: "zh")))
//Optional("中国标准时间")
网友评论