2

これは本当に奇妙です。コードが半分の時間で完全に機能し、残りの半分では機能しない原因が何であるかはわかりません。TBXML を使用して Twitter フィードを解析しています。のように渡される Twitter フィードで created_at の日付を取得する必要があります<created_at>Tue Feb 02 23:30:49 +0000 2010</created_at>。したがって、これらの値を保存してから、それぞれをメソッドに渡します。getTweetTimeメソッドは、それらをフォーマットし、それらを unix してから、現在の日付と比較して、Twitter の「約 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」を追加しようとしましたが、役に立ちませんでした。

4

1 に答える 1

2

時間には大文字の HH を試してください。標準では、「h」は 1 ~ 12 の時間です。「失敗」の時間は17時間であるという例に注意してください。

于 2010-09-02T21:53:46.957 に答える