2012-04-27 55 views
2

我有一個NSDate和NSDateFormatter的問題。NSDate和NSDateFormatter返回無效CFStrinfRef

從這個NSString的

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

我會獲得與當前的區域設置這樣的定位有個約會 「星期四,2012年4月19日13:09」。 我詳細說明了這段代碼,但'endDate'字符串返回nil(在調試器中獲取'無效的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 2012-04-27 09:40:08

+0

確保您獲得有效的NSDate。 – 2012-04-27 11:19:12

回答

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 2012-04-27 13:28:08

+0

謝謝。這暗示工作正常。 – umpire274 2012-04-27 13:37:04

+0

@ 9dan你明白了。 – 2012-04-27 14:36:54

0

Ya其工作正常..嘗試從您的dateFormatter中刪除autorelease,然後再試一次。

,我希望這種聯繫是一樣的你

Invalid CFStringRef issue

試試這個答案,並與"ZZ",而不是"ZZZ"更改格式選項。