2010-09-02 45 views
2

這真的很奇怪,我不確定可能是什麼導致代碼在一半時間內完美工作,而不是另一半時間。我正在使用TBXML來解析Twitter Feed。我需要獲取像<created_at>Tue Feb 02 23:30:49 +0000 2010</created_at>那樣傳遞的twitter提要中的created_at日期。因此,我存儲這些值,然後將它們傳遞給我的getTweetTime方法,該方法將對它們進行格式化,讓它們對它們進行unix,然後與當前日期進行比較,以便返回類似於「大約3小時前」推文的字符串結構體。使用NSDateFormatter將NSString轉換爲unix時間 - 代碼工作時間的50%

問題是,即使所有值都被正確存儲並傳遞給具有正確值的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次失敗,在時間= 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的字符串也無濟於事。

回答

2

嘗試大寫HH小時。該標準說'h'是從1-12小時。你會注意到你的例子,「失敗」有一個小時17。

+0

謝謝,你明白了。 – 2010-09-02 21:59:45