如何将UTC日期转换为NSDate?

时间:2010-03-24 02:37:37

标签: iphone objective-c nsdate nsdateformatter

我有一个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也是零

不完全确定我做错了什么。

3 个答案:

答案 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 3339ISO 8601的子集one deviation(RFC 3339中允许负零偏移)。因此,Apple的代码一举两得,处理所谓的“互联网式”RFC 3339日期时间以及ISO 8601的简单日期时间。