swift2 UTC到本地时间的转换在Swift 2中不起作用

qcuzuvrc  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(149)

我尝试将UTC时间转换为本地时区,但似乎根本无法转换:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date1 = dateFormatter.dateFromString(dateStringFromServer)!
dateFormatter.timeZone = NSTimeZone.localTimeZone()
let date2 = dateFormatter.dateFromString(dateStringFromServer)!

dateStringFromServer是UTC日期的字符串表示。因此,我希望date1是UTC,date2是PDT(我的本地时区),但它们都是相同的。语法有问题吗?
这是我得到的:

dateStringFromServer: 2016-10-21T05:24:26.000Z
date1: 2016-10-21 05:24:26 +0000
date2: 2016-10-21 05:24:26 +0000

如何使date2处于设备的本地时区?

ni65a41a

ni65a41a1#

如果要转换为设备上设置的时区,可以执行以下操作
快速3

let dateFormatter =  DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date1 = dateFormatter.date(from: dateStringFromServer)
    // return the timeZone of your device i.e. America/Los_angeles
    let timeZone = TimeZone.autoupdatingCurrent.identifier as String
    dateFormatter.timeZone = TimeZone(identifier: timeZone)
    let date2 = dateFormatter.string(from: date1)

swift2

let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date1 = dateFormatter.dateFromString(dateStringFromServer)
    // return the timeZone of your device i.e. America/Los_angeles
    let timeZone = NSTimeZone.localTimeZone().name
   dateFormatter.timeZone =  NSTimeZone(name: timeZone)
    let date2 = dateFormatter.stringFromDate(date1!)
5uzkadbs

5uzkadbs2#

这是一样的,因为即使你认为你是在设置第一个日期 * 之后 * 将日期格式化程序的时区设置为当前时区,这也没有关系。如果你没有设置日期格式化程序的时区,它会自动设置为苹果公司的NSDateFormatter文档中指定的系统时区:
如果未指定,则使用系统时区。
因此,日期格式化程序的时区对于第一个日期隐式地设置为相同,对于第二个日期显式地设置为相同,因为它们碰巧是相同的,因此返回的是相同的日期。

7kjnsjlb

7kjnsjlb3#

以下是在swift 4中运行的代码。

func UTCToLocal(date:String, fromFormat: String, toFormat: String) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = fromFormat
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

    let dt = dateFormatter.date(from: date)
    dateFormatter.timeZone = TimeZone.current
    dateFormatter.dateFormat = toFormat

    return dateFormatter.string(from: dt!)
}

如何用途:-

let localDateAsString = UTCToLocal(date: deadline!, fromFormat: "yyyy-MM-dd HH:mm:ss", toFormat: "MM-dd-yyyy hh:mm a")

相关问题