使用NSDateFormatter将NSString转换为unix时间 - Code占50%的时间

时间:2010-09-02 21:41:01

标签: iphone nsdate nsdateformatter

这真的很奇怪,我不确定是什么原因导致代码在一半时间内完全正常工作而不是另一半。我正在使用TBXML来解析Twitter提要。我需要在twitter Feed中获取created_at日期,其传递方式与<created_at>Tue Feb 02 23:30:49 +0000 2010</created_at>一样。所以我存储了这些值,然后将它们传递给我的getTweetTime方法,它将格式化它们,让它们对它们进行unix,然后与当前日期进行比较,以便返回类似于twitters的字符串“about 3小时前“日期结构。

问题在于,即使这些值都正确存储并使用正确的值传递给我的getTweetTime方法,但许多值都没有通过具有合法值的格式化步骤。继承我的代码:

    -(NSString *) getTweetTime:(NSString*)time
{       
    NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
    [df setDateFormat:@"ccc MMM dd hh:mm:ss Z yyyy"];
    NSDate *myDate = [df dateFromString: time];


    NSLog(@"time%@", time);
    long tweetTime =  (long)[myDate timeIntervalSince1970];
    long currentTime = (long)[[NSDate date] timeIntervalSince1970]; 

    int delta = currentTime - tweetTime;    
    NSLog(@"tweet:%ld, current:%ld", tweetTime, currentTime);

    if (delta < 60) {
        return @" (less than a minute ago)";
    } else if (delta < 120) {
        return @" (about a minute ago)";
    } else if (delta < (60 * 60)) {
        return [[NSString stringWithFormat:@" ( about %u",(delta / 60)] stringByAppendingString:@" minutes ago)"];
    } else if (delta < (120 * 60)) {
        return @" (about an hour ago)";
    } else if (delta < (24 * 60 * 60)) {        
        return [[NSString stringWithFormat:@" (about %u",((delta / 3600) - 1)] stringByAppendingString:@" hours ago)"];
    } else if (delta < (48 * 60 * 60)) {
        return @" (1 day ago)";
    } 
    else if(tweetTime == 0){return @"********";}
    else {
        return [[NSString stringWithFormat:@" (%u",(delta / 86400)] stringByAppendingString:@" days ago)"];
    }    

}

在每次成功解析的事件之间似乎没有任何模式。这是典型的控制台输出1成功,1失败,其中time = 0是失败:

2010-09-02 14:45:12.963 myApp[6401:307] timeTue Aug 31 17:59:34 +0000 2010
2010-09-02 14:45:12.964 myApp[6401:307] tweet:0, current:1283463912
2010-09-02 14:45:12.970 myApp[6401:307] timeTue Aug 31 06:36:29 +0000 2010
2010-09-02 14:45:12.972 myApp[6401:307] tweet:1283236589, current:1283463912

我尝试在字符串中添加一些'Z'也无济于事。

1 个答案:

答案 0 :(得分:2)

小时尝试大写HH。标准说'h'是从1-12开始的小时。你会注意到你的例子“失败”的时间为17小时。