2010-12-11 171 views
3

我想从Twitter API结果转换为NSDate对象使用NSDateFormatter字符串。我发现的是,NSDateFormatter只是返回我的机器的当前日期/时间。任何帮助将不胜感激!NSDateFormatter - 从Twitter解析日期JSON API

这里的字符串的样子进入我的功能:

周六,2010年12月11日1时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时将使用autorelease的内存管理更改为函数中的显式版本。当在一个巨大的循环中调用这个函数时,我发现它在autorelease时开始失败(我猜测汽车部分没有足够快地释放),但是改变它以解决问题。

+0

你也可以说调用这个方法,你是如何显示结果的代码? – Anna 2010-12-11 03:57:29

+1

您的代码适用于我。我会检查你处理返回值的位置。 (虽然你的代码每次运行时都会泄漏一个NSDateFormatter) – 2010-12-11 07:08:21

+0

谢谢史蒂夫,内存泄漏固定! – 2010-12-11 19:40:08

回答

1

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

当您打印日期如[日期说明]时,它会打印在当地时区,我相信但时间是绝对的。由于NSDate只包含秒,而不包含日历,而不包含时区信息。

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

+0

谢谢,我觉得我只是没有面试的问题:)好东西我是一名程序管理员,而不是开发人员! – 2010-12-11 19:39:19