2012-04-27 81 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"更改格式选项。