1

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

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

4

3 回答 3

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 标准

于 2010-03-24T04:14:00.487 回答
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。

于 2010-03-24T02:43:13.143 回答
0

Apple 提供了解析 RFC 3339 date-time 的源代码。如果使用 ARC,您可能需要通过删除对“自动释放”的调用来调整该来源。

仅供参考,RFC 3339ISO 8601的一个子集,有一个偏差(RFC 3339 中允许负零偏移)。因此,Apple 的代码是用一块石头杀死两只鸟,处理所谓的“互联网风格”RFC 3339 日期时间以及 ISO 8601 的简单日期时间。

于 2012-09-29T21:16:54.290 回答