我有一个UTC字符串,希望将其转换为NSDate。
static NSDateFormatter* _twitter_dateFormatter;
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
[_twitter_dateFormatter setLocale:_en_us_locale];
NSDate *d = [_twitter_dateFormatter dateFromString:sDate];
当我通过调试器时,即使sDate是“2010-03-24T02:35:57Z”,d也是零
不完全确定我做错了什么。
答案 0 :(得分:3)
同样需要分配/初始化您的NSDateFormatter对象,但是您还有另一个问题:您的日期格式字符串与您提供它的实际日期不匹配。
"EEE MMM dd HH:mm:ss ZZZ yyyy"
- vs -
"2010-03-24T02:35:57Z"
该格式字符串将匹配如下内容:
"Wed Mar 24 00:07:33 -0400 2010"
有关日期格式字符串的含义,请参阅unicode standard。
答案 1 :(得分:1)
您没有分配或初始化您的NSDateFormatter对象。
尝试这样的事情:
NSDateFormatter* _twitter_dateFormatter = [[NSDateFormatter alloc] init];
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
[_twitter_dateFormatter setLocale:_en_us_locale];
NSDate *d = [_twitter_dateFormatter dateFromString:sDate];
[_twitter_dateFormatter release];
还不清楚为什么要将_twitter_dateFormatter声明为静态。如果你试图避免重新分配它,那就把它变成你班级的ivar。
答案 2 :(得分:0)
Apple提供Parsing an RFC 3339 date-time的源代码。如果使用ARC,您可能希望通过删除对“autorelease”的调用来调整该源。
仅供参考,RFC 3339是ISO 8601的子集one deviation(RFC 3339中允许负零偏移)。因此,Apple的代码一举两得,处理所谓的“互联网式”RFC 3339日期时间以及ISO 8601的简单日期时间。