2016-08-28 1 views
0

이 서버 날짜를 kinvey 요청에서 현지 시간대로 변환해야합니다.Z 형식의 서버 날짜를 로컬 nsdate로 변환

나는 다음과 같은 코드를 사용하고 있습니다 :

요법 = "2016-08-28T16 : 30 : 06.553Z"또는 LMT = "

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-ddTHH:mm:ss.sTZD" 
print(dateFormatter.dateFromString(newValue)) 

날짜 형식이있다 2016-08-28T16 : 30 : 06.553Z "

날짜를 인쇄 할 때 그것이 내가 잘못한 것을 알고 있습니까? 난 당신이 설명 포맷 기호 사용할 수있는 앱은 iOS7에 +를 타겟팅 할 수있는 경우는 dateFormat는

+0

날짜 문자열은 간단한 UTC 날짜 인 것 같습니다. 단순히 'NSDate'로 구문 분석하려고하는 것 같습니다. 제목에 ECT 또는 LMT의 의미는 무엇입니까? – OOPer

+0

당신의 권리는 간단한 utc 날짜입니다. 문제는 구문 분석 할 수 없습니다. nsdate로 입력합니다. 나는 많은 포털을 가지고 노력하고 있지만 어느 것도 작동하지 않습니다! –

답변

3

의 끝이 될 수 있다고 생각 :

Fixed Formats (in Data Formatting Guide)

유니 코드 기술 표준 # 35 version tr35-31

초 | S | 1..n | 3456 | Fractional Second - 다른 시간 필드와 마찬가지로) 문자 수를 잘라냅니다. (예는 패턴 초 SSSS 초 값 12.34567 사용)

영역 | X | 1 | -08, + 0530, Z | 시간 필드 및 선택적 분 필드가있는 ISO8601 기본 형식입니다. ISO8601 UTC 표시기 "Z"는 오프셋 로컬 시간이 0 인 경우에 사용합니다 ( X와 동일 플러스 "Z").

따라서, 소수 제를 파싱 대문자 'S'을 사용하려면,

'U'로 'Z'가 포함 된 시간대 'X'.

이 시도 :

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX" 

는 (나는 'T'를 탈출이 미래에 기호 서식을 다른 시간으로 사용할 수있다.)


PS합니다. "Z"를 UTC + 0000으로 해석하는 날짜 형식을 설명하는 스레드를 찾을 수는 없지만 일부 조건이 충족 될 경우이를 무시하거나 제거하는 것이 좋지 않을 수 있습니다. 최선의 해결책을 찾으십시오.

+0

고마워요, 드디어 작품입니다. 또한 주어진 ** 날짜 **에서 마지막 5자를 삭제하고 파싱하여 새로운 ** 부분 문자열 **을 작성하여 다른 솔루션을 구현했습니다. 그러나 귀하의 대답이 최선의 해결책이라고 생각합니다. –

+0

Z를 X로 대체하는 이유는 무엇입니까?하지만이 마법에 대한 설명은 – ShivaPrasad

+0

@ ShivaPrasad입니다. [링크 된 기사] (http://www.unicode.org/reports/tr35/tr35-31/tr35- dates.html # Date_Format_Patterns). 간단히 말해서, 기호'Z'를 포맷팅하는 것은 **'+ hh : mm' ** (그리고 다른 것들)과 같은 날짜 오프셋과 일치하지만 **'Z' **와는 일치하지 않습니다. 그러나 기호'X '의 서식은 **'+ hh : mm' ** 및 **'Z' **와 일치합니다. – OOPer