【问题标题】:NSDateFormatter - Trouble Parsing Date from Twitter JSON APINSDateFormatter - 无法从 Twitter JSON API 解析日期
【发布时间】:2011-05-23 19:46:30
【问题描述】:

我正在尝试使用 NSDateFormatter 将 Twitter API 结果中的字符串转换为 NSDate 对象。我发现 NSDateFormatter 只是返回我机器的当前日期/时间。任何帮助将不胜感激!

这是进入我的函数的字符串的样子:

2010 年 12 月 11 日星期六 01:35:52 +0000

函数如下:

+(NSDate*)convertTwitterDateToNSDate:(NSString*)created_at
{
    // Sat, 11 Dec 2010 01:35:52 +0000
    static NSDateFormatter* df = nil;

    df = [[NSDateFormatter alloc] init];
    [df setTimeStyle:NSDateFormatterFullStyle];
    [df setFormatterBehavior:NSDateFormatterBehavior10_4];
    [df setDateFormat:@"EEE, d LLL yyyy HH:mm:ss Z"];

    NSDate* convertedDate = [df dateFromString:created_at];     
    [df release];

    return convertedDate;
}

这是返回的日期:

2010-12-10 17:58:26 -0800

恰好是我现在电脑的日期和时间。

*注意!* 将内存管理从分配 DateFormater 时使用自动释放更改为函数中的显式释放。当在一个巨大的循环中调用它时,我发现它开始因自动释放而失败(我猜汽车部分释放的速度不够快),但将其更改为这个解决了问题。

【问题讨论】:

  • 您能否展示调用该方法的代码以及您如何展示结果?
  • 您的代码对我有用。我会检查你在哪里处理返回值。 (尽管您的代码每次运行时都会泄漏 NSDateFormatter。)
  • 谢谢史蒂夫,内存泄漏已修复!
  • 对于所有开发跨区域设置的人,请注意NSDateFormatter 严格遵守区域设置!添加[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]],您就安全了。
  • 行NSString* convertedDate = [df dateFromString:created_at];应该是NSDate* convertedDate = [df dateFromString:created_at];

标签: ios twitter nsdate nsdateformatter


【解决方案1】:

我认为是对的。因为原始字符串在 +0000 时区,结果日期在 -0800 时区。因此,如果您仔细观察它们,您会发现它们是同一时间。

当您打印 [日期描述] 之类的日期时,我相信它将以当地时区打印,但时间是绝对的。由于 NSDate 只包含秒而不包含日历,而不包含时区信息。

(打印的字符串是相对于本地时区的,但实际日期是绝对的)

【讨论】:

  • 谢谢你,我感觉我的面试题好像没能通过 :) 幸好我是项目经理而不是开发人员!
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2011-12-17
相关资源
最近更新 更多