Iphone NSString到NSDate不在iDevice上工作

Iphone NSString到NSDate不在iDevice上工作,iphone,objective-c,ios,nsstring,nsdate,Iphone,Objective C,Ios,Nsstring,Nsdate,我在将NSString转换为NSDate并返回到格式化NSString时遇到问题。这个代码片段在iOS模拟器上运行没有任何问题,但在我的iPhone4上不起作用 NSString *pubDate = @"Tue, 18 Oct 2011 05:00:00 +0100"; NSDateFormatter *formater1 = [[NSDateFormatter alloc] init]; [formater1 setDateFormat:@"EEE, dd MMM yyyy HH:mm:s

我在将NSString转换为NSDate并返回到格式化NSString时遇到问题。这个代码片段在iOS模拟器上运行没有任何问题,但在我的iPhone4上不起作用

NSString *pubDate = @"Tue, 18 Oct 2011 05:00:00 +0100";

NSDateFormatter *formater1 = [[NSDateFormatter alloc] init];
[formater1 setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];

NSDate *d = [formater1 dateFromString:pubDate];
NSLog(@"d: %@", d);


NSDateFormatter *formater2 = [[NSDateFormatter alloc] init];
[formater2 setDateFormat:@"dd MMM yyyy"];

NSString *k = [formater2 stringFromDate:d]; 
NSLog(@"k: %@", k);

[formater1 release];
[formater2 release];
模拟器的输出为:

d: 2011-10-18 04:00:00 +0000
k: 18 Oct 2011
设备上的输出为:

d: (null)
k: (null)

有什么建议吗?

这可能是因为该设备未设置为英语,因此无法解析
pubDat
中的
Tue
Oct

尝试将区域设置添加到
NSDateFormatter

[formater1 setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"EN"] autorelease]];

您需要在日期格式化程序上设置区域设置

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

//...
formater1.locale = locale;

//...
formater2.locale = locale;

//...
[locale release];
如果不设置区域设置,则用户的设置可以更改提供的字符串以符合用户的设置,例如将12小时时钟更改为24小时时钟,反之亦然