Convert UTC NSDate into Local NSDate not working

人走茶凉 提交于 2020-07-23 05:26:21

问题


I have a string getting from server as "yyyy-MM-dd'T'HH:mm:ss.SSS'Z" I convert this string into NSDate by this formate.

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!
}

Suppose the parameter string is "2016-11-05T12:00:00.000Z" but when i convert this string and return a NSDate object it doesn't change the time according to my local time. I get my correct time in the timeStamp string (in above code). But when i try to convert that timeStamp string into NSDate it again shows that date and time which i got as a parameter.


回答1:


You shouldnt change a NSDate's time. NSDates are just a point in time, counted by seconds. They have no clue about timezones, days, month, years, hours, minutes, seconds,… If printed directly they will always output the time in UTC.
If you change the date to show you the time of your timezone you are actually altering the time in UTC — hence your date becomes representing another point in time, no matter of the timezone.
Keep them intact by not altering them, instead when you need to display them do it via a date formatter.
If you need to do time calculations that are independent of timezones you also can work with NSDateComponents instead.




回答2:


NSDate doesn't have a timezone. It's a point in time, independent of anything, especially timezones. You cannot "convert a UTC NSDate to a local NSDate", the statement itself doesn't make any sense.



来源:https://stackoverflow.com/questions/40438550/convert-utc-nsdate-into-local-nsdate-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!