swift TimeZone

Posted ihoudf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift TimeZone相关的知识,希望对你有一定的参考价值。

作者:想聽丿伱說衹愛我
链接:https://www.jianshu.com/p/e3eb723d7f83
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、简介

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. 初始化
  • 通过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))
  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("中国标准时间")

以上是关于swift TimeZone的主要内容,如果未能解决你的问题,请参考以下文章

swift TimeZone

swift TimeZone

在 Swift 中使用 DateFormatter 和 TimeZone 来格式化日期

Swift UTC 时区不是 UTC

PayPal NVP:TimeZone 字段中可以显示哪些值?

如何正确使用TimeZone