NSString到NSDate不能在iDevice上工作



我有一个问题转换NSString到NSDate和返回到格式化的NSString。代码片段在iOS模拟器上没有任何问题,但在我的iPhone 4上不起作用。

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)

有什么建议吗?

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

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
//...
formater1.locale = locale;
//...
formater2.locale = locale;
//...
[locale release];

如果您没有设置区域设置,那么用户的设置可以更改提供的字符串以符合用户的设置,例如将12h改为24h时钟,反之亦然。

这可能是因为设备未设置为英文,因此无法解析pubDat中的TueOct

尝试向NSDateFormatter添加一个区域设置:

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

最新更新