2016-11-05 1 views
0

서버에서 문자열을 가져 왔습니다. 이 문자열을이 formate로 NSDate로 변환합니다. "2016-11-05T12 : 00 : 00.000Z"을 UTC NSDate를 로컬 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! 
} 

은 매개 변수 문자열이 가정하지만 난이 문자열을 변환하여 NSDate 개체를 반환 할 때 내 현지 시간에 따라 시간이 변경되지 않습니다. 위의 코드에서 timeStamp 문자열로 정확한 시간을 얻습니다. 하지만 내가 그 timeStamp 문자열을 NSDate로 다시 변환하려고하면 그 날짜와 시간을 매개 변수로 다시 보여줍니다.

+0

날짜 형식에서'Z'를 인용하지 마십시오. 문자 그대로'Z'는 원하지 않습니다. 시간대로 적절하게 처리되기를 원합니다. – rmaddy

답변

2

NSDate의 시간을 변경하지 마십시오. NSDates는 초 단위로 계산됩니다. 시간대, 일, 월, 년,시, 분, 초에 대한 단서가 없습니다. 직접 인쇄하면 항상 UTC로 시간이 출력됩니다.
시간대를 표시하도록 날짜를 변경하면 실제로 UTC로 시간이 변경되므로 시간대에 관계없이 날짜가 다른 시점을 나타냅니다.
날짜 표시기를 사용하여 표시해야 할 때 대신 변경하지 않고 그대로 유지하십시오.
시간대와 무관 한 시간 계산을 수행해야하는 경우 대신 NSDateComponents를 사용할 수도 있습니다.

+0

NSDateComponent를 사용하여 시간을 계산하는 예제를 인용 할 수 있습니까? 예 : 오후 11시 33 분에 45 분 추가 및 어떻게 12:18 AM으로 변환 할 수 있습니까? –

+0

각 구성 요소 (년, 월, 일,시, 분 ...)는 정수 유형입니다. 그냥 추가하십시오. – vikingosegundo

+0

실마리를 얻었습니다. 고맙습니다 ... –

0

NSDate에는 시간대가 없습니다. 시간과 장소에 구애받지 않는 시간대, 특히 시간대입니다. "UTC NSDate를 로컬 NSDate로 변환"할 수 없으므로 명령문 자체가 의미가 없습니다.