美文网首页Swift
swift TimeZone

swift TimeZone

作者: 想聽丿伱說衹愛我 | 来源:发表于2020-12-10 16:08 被阅读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. 初始化
    • 通过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

        本文链接:https://www.haomeiwen.com/subject/nvzlgktx.html