2012-04-27 3 views
2

NSDate 및 NSDateFormatter에 한 가지 문제가 있습니다. 나는이 같은 현재 로케일과 지역화 된 날짜 얻을 것이다이있는 NSStringNSDate 및 NSDateFormatter가 잘못된 CFStrinfRef를 반환합니다.

NSString *startDate = @"Thu, 19 Apr 2012 13:09:56 +0000"; 

에서

"목을 2012년 4월 19일 13시 9분". 이 코드는 정교하게 작성했지만 'endDate'문자열은 nil을 반환합니다 (디버거에서 'invalid CFStringRef'를 얻음).

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"]; 
NSDate *dateFromString = [dateFormatter dateFromString:startDate]; 

[dateFormatter setDateFormat:@"EEE dd MMM yyyy HH:mm"]; 
[dateFormatter setLocale:[NSLocale currentLocale]]; 

NSString *endDate = [dateFormatter stringFromDate:dateFromString]; 

버그는 어디에 있습니까?

Alex.

+2

난 그냥 코드를 시도하고, 오류가 발생하는 이유가 있는지 .. 마법처럼 일을 그렇게하지? – Krueger

+0

유효한 NSDate를 받고 있는지 확인하십시오. –

답변

2

코드가 미국 이외의 로켈에서 실행 된 것으로 보입니다. 나는 미국 이외의 지역을 사용한다. 같은 nil 출력도 있습니다.

setLocale: 앞에 setDateFormat: 앞에 필요하다고 생각됩니다. 코드 아래

괜찮 작동합니다

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
NSLocale *usLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]; 
[dateFormatter setLocale:usLocale]; 
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"]; 
+0

@ R.A에서 언급했듯이 "ZZ"는 정확합니다. "ZZZ"는 3 자의 시간대 코드를 의미합니다. – 9dan

+0

감사합니다. 힌트가 잘 작동합니다. – umpire274

+0

@ 9dan 당신은 요점이 .. –

0

예. 올바르게 작동합니다. dateFormatter에서 autorelease을 제거한 다음 다시 시도하십시오.

와 나는 당신

Invalid CFStringRef issue

이 대답을 시도하고 "ZZ"하지 "ZZZ"와 형식 옵션을 변경하면이 링크는 동일 바랍니다.

관련 문제