我正在尝试将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在设备的本地时区?
答案 0 :(得分:0)
如果要转换为设备上设置的时区,可以执行此操作
Swift3
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!)
答案 1 :(得分:0)
它是一样的,因为即使您认为在设置第一个日期之后将日期格式化程序的时区设置为当前时区,它也不会#39;重要。如果您没有设置日期格式化程序的时区,它会自动设置为Apple NSDateFormatter
的文档中指定的系统时区:
如果未指定,则使用系统时区。
因此,日期格式化程序的时区对于第一个日期和第二个日期都是隐式设置的,因为它们恰好相同,因此您将获得相同的日期。
答案 2 :(得分:0)
这是在swift4中工作的代码。
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")