Swift

swift TimeZone

2020-12-10  本文已影响0人  想聽丿伱說衹愛我

一、简介

TimeZone定义了时区的行为,时区值表示相对格林威治标准时间(GMT)的时间偏移量(正或负)。
请注意,America/Los_Angeles是时区的ID,而不是名称。时区名称的示例是Pacific Daylight Time。

二、API

  1. 获取系统当前使用的时区
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)
  1. 初始化
public init?(identifier: String)

系统自带的id可通过knownTimeZoneIdentifiers方法获取。

var tz = TimeZone(identifier: "Asia/Shanghai")
print(tz)
//Optional(Asia/Shanghai (current))
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))
  1. 获取时区的id
public var identifier: String { get }

public init?(identifier: String)可使用该id初始化。

var tz = TimeZone.current
print(tz.identifier)
//Asia/Shanghai
  1. 获取相对于格林尼治标准时间(GMT)的时间偏移量
public func secondsFromGMT(for date: Date = Date()) -> Int

public init?(secondsFromGMT seconds: Int)可使用该偏移量初始化。

var tz = TimeZone.current
print(tz.secondsFromGMT())
//28800
  1. 获取时区的缩写
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")
  1. 夏令时

夏令时又称“经济时”或“日光节约时”。法定时的一种。在夏季,由于昼长夜短,为充分利用日光,把时钟适当拨快;到秋季,再拨回。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
  1. 获取系统已知的所有时区的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", 
  1. 获取缩写与时区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"
  1. 获取时区数据的版本
public static var timeZoneDataVersion: String { get }
print(TimeZone.timeZoneDataVersion)
//2020d
  1. 获取指定语言环境本地化的时区名称
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("中国标准时间")
上一篇下一篇

猜你喜欢

热点阅读