我有一个从服务器获取的字符串"yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
我通过这种格式将此字符串转换为NSDate。
class func convertUTCDateToLocateDate(dateStr:String) -> NSDate{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date = dateFormatter.dateFromString(dateStr)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
dateFormatter.timeZone = NSTimeZone.localTimeZone()
let timeStamp = dateFormatter.stringFromDate(date!)
let dateForm = NSDateFormatter()
dateForm.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
dateForm.timeZone = NSTimeZone.localTimeZone()
let dateObj = dateForm.dateFromString(timeStamp)
return dateObj!
}
假设参数字符串为" 2016-11-05T12:00:00.000Z"但当我转换此字符串并返回NSDate
对象时,它不会根据我当地时间更改时间。我在timeStamp
字符串中获取了正确的时间(在上面的代码中)。但是当我尝试将timeStamp
字符串转换为NSDate时,它再次显示我作为参数获得的日期和时间。
答案 0 :(得分:2)
你不应该改变NSDate的时间。 NSDates只是一个时间点,按秒计算。他们不知道时区,天,月,年,小时,分钟,秒......如果直接打印,他们将始终以UTC格式输出时间。
如果您更改日期以显示您的时区时间,您实际上正在改变UTC的时间 - 因此您的日期将代表另一个时间点,无论时区如何。
通过不改变它们来保持它们完好无损,而是当你需要显示它们时,通过日期格式化器来完成它们
如果您需要进行独立于时区的时间计算,您也可以使用NSDateComponents。
答案 1 :(得分:0)
NSDate没有时区。它是一个时间点,独立于任何事物,尤其是时区。您无法将UTC NSDate转换为本地NSDate",该语句本身没有任何意义。