将 UTC NSDate 转换为本地 NSDate 不起作用
Convert UTC NSDate into Local NSDate not working
我有一个从服务器获取的字符串 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
我通过这个 formate 将这个字符串转换成 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”但是当我转换这个字符串和return一个NSDate
对象时它不会根据我的当地时间。我在 timeStamp
字符串中得到了正确的时间(在上面的代码中)。但是当我尝试将 timeStamp
字符串转换为 NSDate 时,它再次显示我作为参数获得的日期和时间。
您不应该更改 NSDate 的时间。 NSDates 只是一个时间点,以秒计算。他们不知道时区、日、月、年、小时、分钟、秒……如果直接打印,他们将始终以 UTC 格式输出时间。
如果您更改日期以显示您所在时区的时间,您实际上是在更改 UTC 时间——因此您的日期将代表另一个时间点,而与时区无关。
通过不更改它们来保持它们的完整性,而是在您需要显示它们时通过日期格式化程序进行。
如果您需要进行独立于时区的时间计算,您也可以使用 NSDateComponents。
NSDate 没有时区。这是一个时间点,独立于任何事物,尤其是时区。你不能"convert a UTC NSDate to a local NSDate",语句本身没有任何意义。
我有一个从服务器获取的字符串 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
我通过这个 formate 将这个字符串转换成 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”但是当我转换这个字符串和return一个NSDate
对象时它不会根据我的当地时间。我在 timeStamp
字符串中得到了正确的时间(在上面的代码中)。但是当我尝试将 timeStamp
字符串转换为 NSDate 时,它再次显示我作为参数获得的日期和时间。
您不应该更改 NSDate 的时间。 NSDates 只是一个时间点,以秒计算。他们不知道时区、日、月、年、小时、分钟、秒……如果直接打印,他们将始终以 UTC 格式输出时间。
如果您更改日期以显示您所在时区的时间,您实际上是在更改 UTC 时间——因此您的日期将代表另一个时间点,而与时区无关。
通过不更改它们来保持它们的完整性,而是在您需要显示它们时通过日期格式化程序进行。
如果您需要进行独立于时区的时间计算,您也可以使用 NSDateComponents。
NSDate 没有时区。这是一个时间点,独立于任何事物,尤其是时区。你不能"convert a UTC NSDate to a local NSDate",语句本身没有任何意义。