【问题标题】:Getting Date object in Swift using full name timezone?使用全名时区在 Swift 中获取 Date 对象?
【发布时间】:2018-09-03 14:34:26
【问题描述】:

我想使用参数获取 Date 对象。使用时区缩写和标识符是可能的。但是我们可以得到全名时区字符串吗?

"dateTime": "2017-04-15T12:00:00",
"timeZone": "Pacific Standard Time"

【问题讨论】:

    标签: swift date nsdate nsdateformatter nstimezone


    【解决方案1】:

    这当然是可能的,但不是很简单。让我们获取所有可能的时区,并将它们的本地化描述与您的描述进行比较:

    let dateString = "2017-04-15T12:00:00"
    let timeZoneName = "Pacific Standard Time"
    let locale = Locale(identifier: "en-US")
    
    let knownTimeZones = TimeZone.knownTimeZoneIdentifiers.flatMap { TimeZone(identifier: $0) }
    let timeZone = knownTimeZones.first {
         // I don't know what type of name you have, `.standard` does not have to be correct
         $0.localizedName(for: .standard, locale: locale) == timeZoneName
    }
    
    print(timeZone)
    
    if let timeZone = timeZone {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = locale
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        dateFormatter.timeZone = timeZone
    
        print(dateFormatter.date(from: dateString))
    }
    

    【讨论】:

    • 我想了解它是如何工作的。据我了解,dateString 和时区意味着保存此信息的时间是太平洋标准时间 2017 年 4 月 15 日上午 12 点。上述行的输出为 2017-04-15 19:00:00 +0000。现在这个输出显示哪个时区?设备时区?如果没有,我如何一次将这种格式的任何时间转换为设备时区。很抱歉要求解释,但交叉检查我是否得到正确的时间让我很困惑。
    • 当您在 Xcode 控制台中打印 Date 时,它会以 UTC (GMT-0) 时区打印。日期本身是一个时间点,它没有时区。如果要在指定的时区显示它,则需要使用该时区创建一个格式化程序并使用它来创建该日期的字符串表示形式。
    • 但是,请注意,时区名称通常会产生误导,因为实际偏移量会因一年中的夏令时而发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多