Iphone 使用NSDateFormatter解析Twitter字符串
我正试图从twitterapi返回的字符串创建NSDate 我花了几个小时在这个问题上,我创建了一个示例应用程序Iphone 使用NSDateFormatter解析Twitter字符串,iphone,objective-c,cocoa-touch,twitter,Iphone,Objective C,Cocoa Touch,Twitter,我正试图从twitterapi返回的字符串创建NSDate 我花了几个小时在这个问题上,我创建了一个示例应用程序 NSString *testDate = @"Mon Jul 25 21:20:58 +0000 2011"; NSDateFormatter *frm = [[NSDateFormatter alloc] init]; [frm setDateStyle:NSDateFormatterLongStyle]; [frm setFormatterBehavior:NSDateForma
NSString *testDate = @"Mon Jul 25 21:20:58 +0000 2011";
NSDateFormatter *frm = [[NSDateFormatter alloc] init];
[frm setDateStyle:NSDateFormatterLongStyle];
[frm setFormatterBehavior:NSDateFormatterBehavior10_4];
[frm setDateFormat: @"EEE MMM dd HH:mm:ss 'Z' yyyy"];
NSDate *newDate = [frm dateFromString:testDate];
NSLog(@"newDate:%@", newDate);
对我来说,这个代码“应该”起作用
我得到的只是这个:
2011-07-25 19:36:08.467 test[92:707] Test
2011-07-25 19:36:08.475 test[92:707] newDate:(null)
我有Lion+Xcode 4.1
我的iPad低于4.3.5
提前感谢您的帮助;) 不要把自己踢得太厉害
在格式字符串中,从
Z
周围删除撇号。撇号意味着它将是一个文本Z
,而不是时区。如果你去掉这些,它就会正常工作。以下是我的工作原理
没有像戴夫·德隆说的那样引用Z。
我在NSDateFormatter上使用了setLocale,这使它工作得更好
NSDateFormatter *frm = [[NSDateFormatter alloc] init];
[frm setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[frm setDateFormat:@"EEE MMM dd HH:mm:ss Z yyyy"];
对于任何通过谷歌发现这一点的人来说,Twitter显然已经改变了他们的日期格式,至少在
http://search.twitter.com/search.json
endpoint
NSDate __attribute__((pure)) *parseTwitterDate(NSString *twitterDate) {
NSDateFormatter *twitterDateFormatter = NSDateFormatter.new;
[twitterDateFormatter setDateFormat: @"EEE, dd MMM yyyy HH:mm:ss Z"];
return [twitterDateFormatter dateFromString:twitterDate];
};
Twitter搜索端点从一开始就采用了不同的日期格式,我使用的解决方案与您的相同。谢谢你的回答,我应该更准确地回答这个问题。很有趣。这是一个设计糟糕的API的标志,他们甚至不能在整个API中使用一致的(如果不清楚的话)日期格式。他们应该只使用ISO8601。没有设置@“en_US_POSIX”语言环境标识符,代码片段只在模拟器上工作。现在它也可以在设备上工作。谢谢