NSDateFormatter dateFromString返回nil

Har*_*nen 22 iphone cocoa objective-c

这是我的代码:

NSString *_date = @"Tue, 23 Nov 2010 16:14:14 +0000";
NSDateFormatter *parser = [[NSDateFormatter alloc] init];
[parser setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss '+0000'"];
[parser setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate *date = [parser dateFromString:_date];
Run Code Online (Sandbox Code Playgroud)

这不会运行:'date'设置为'nil'.我试过了

[parser setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
Run Code Online (Sandbox Code Playgroud)

没有更多成功......

你有什么主意吗 ?

提前致谢

Ole*_*ann 53

添加此行:

NSDateFormatter *parser = [[NSDateFormatter alloc] init];
[parser setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
Run Code Online (Sandbox Code Playgroud)

它会起作用.默认情况下,NSDateFormatter使用系统的当前区域设置,该区域设置可能会根据当前用户的首选项而有所不同.上面的日期字符串(@"Tue, 23 Nov 2010 16:14:14 +0000")包含英语单词("Tue","Sep"),如果语言环境设置为英语以外的其他语言,则日期格式器可能无法识别.

此外,来自非西方文化的用户可能会使用使用与西方世界中使用的公历不同的日历的区域设置.如果您没有明确设置区域设置,则日期格式化程序可能能够解析日期,但结果NSDate将代表整个其他时间点.

区域设置标识符@"en_US_POSIX"用于此目的.即使@"en_US"语言环境有一天应该更改其默认设置,也保证不会更改.