2010-03-24 13 views
1

문자열이 UTC이고 NSDate로 변환하고 싶습니다. "2010-03-24T02 : 35 : 57Z" UTC 날짜를 NSDate로 변환하는 방법?

static NSDateFormatter* _twitter_dateFormatter; 
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"]; 
[_twitter_dateFormatter setLocale:_en_us_locale]; 

NSDate *d = [_twitter_dateFormatter dateFromString:sDate]; 

내가 디버거 D를 통해 이동

는 sDate이 경우에도 전무하다 내가 잘못 정확히 확인

하지 않습니다.

+0

또한 약간의 nit-pick : d는 디버거에서 nil입니다. * d가 아닌 (널 포인터를 역 참조 할 수 없음). –

+0

사실, 당신의 문자열은 "UTC"가 아닙니다. 'sDate'문자열 값은 Zulu (UTC) 시간대 (끝에 'Z')에있는 datetime을 나타내는 표준 형식 (RFC 3339 또는 ISO 8601)입니다. –

답변

3

NSDateFormatter 객체를 할당/초기화 할 필요가 있지만, 날짜 형식 문자열이 사용자가 제공 한 실제 날짜와 일치하지 않는 문제도 있습니다.

"EEE MMM dd HH:mm:ss ZZZ yyyy" 
- vs - 
"2010-03-24T02:35:57Z" 

형식 문자열이 같은 일치하는 것 :

"Wed Mar 24 00:07:33 -0400 2010" 

날짜 형식 문자열의 의미에 대한 unicode standard를 참조하십시오.

+0

불일치를 지적 해 주셔서 감사합니다. 나는 "2010-03-24T02 : 35 : 57Z"처럼 문자열을 어떻게 포맷 할 수 있는지 모르겠습니다. –

+0

비슷한 질문 http://stackoverflow.com/questions/1263455/nil-nsdate-when-trying-to- get-date-from-utc-string-in-zulu-time 특히 입력 문자열의 마지막 "Z"를 명시 적 숫자 시간대 (-0000)로 바꿀 수도 있다는 제안에 유의하십시오. –

+0

감사! 제 경우에는 날짜 형식은 yyyy-MM-dd'T'HH : mm : ssZ이어야합니다. Z를 (-0000)으로 대체하면 트릭이 수행됩니다. –

1

NSDateFormatter 객체를 할당하거나 초기화하지 않습니다. 이 같은

시도 뭔가 : 정적으로 _twitter_dateFormatter 선언하는 이유

NSDateFormatter* _twitter_dateFormatter = [[NSDateFormatter alloc] init]; 
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"]; 
[_twitter_dateFormatter setLocale:_en_us_locale]; 

NSDate *d = [_twitter_dateFormatter dateFromString:sDate]; 
[_twitter_dateFormatter release]; 

또한 불분명하다. 다시 할당하지 않으려는 경우 클래스의 ivar로 만듭니다.

0

애플은 Parsing an RFC 3339 date-time에 대한 소스 코드를 제공합니다. ARC를 사용하는 경우 'autorelease'에 대한 호출을 제거하여 해당 소스를 조정할 수 있습니다.

FYI, RFC 3339ISO 8601의 하위 집합으로 one deviation입니다 (음수 0 오프셋은 RFC 3339에서 허용됨). 그래서 Apple의 코드는 ISO 8601의 간단한 datetimes뿐만 아니라 인터넷 스타일의 RFC 3339 datetimes를 처리하면서 하나의 돌로 두 마리의 새를 죽이고 있습니다.

관련 문제