1

NSDate の比較に問題があります。問題をグーグルで検索しているときに見つけたいくつかの解決策を試しましたが、何も変わりませんでした。

私のコードは次のようになります。

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
    [inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    for (checklisteModel *updateRecord in updateArray) 
    {

        NSDate *serverDate = [inputFormatter dateFromString:updateRecord.last_update];

        NSString *lastUpdateFromLocalRecord = [self getLastUpdateForChecklisteItemWithID:updateRecord.checklisteID];
        NSDate *localDate = [inputFormatter dateFromString:lastUpdateFromLocalRecord];

        NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
        NSLog(@"checkliste ID: %i",updateRecord.checklisteID);
        NSLog(@"server Date: ----- %@",[fmt stringFromDate:serverDate]);
        NSLog(@"local Date: ----- %@",lastUpdateFromLocalRecord);



        NSLog(@"difference of dates: %f",[serverDate timeIntervalSinceDate:localDate]);


        NSTimeInterval distanceBetweenDates = [serverDate timeIntervalSinceDate:localDate];
        double secondsInMinute = 60;
        NSInteger secondsBetweenDates = distanceBetweenDates / secondsInMinute;

        if (secondsBetweenDates == 0)
            NSLog(@"seconds between == 0");
        else if (secondsBetweenDates < 0)
            NSLog(@"seconds between < 0");
        else
            NSLog(@"seconds between > 0");



        //last_update on server is earlier than local
        if ([serverDate compare:localDate] == NSOrderedAscending) 
        {

            NSLog(@"Server data is earlier than local data");
            NSLog([NSString stringWithFormat:@"server data: %@, local data: %@",updateRecord.last_update,lastUpdateFromLocalRecord]);
        }
        // server data is later than local data
        else if ([serverDate compare:localDate] == NSOrderedDescending) 
        {

            NSLog(@"Server data is later than local data");
            NSLog([NSString stringWithFormat:@"server data: %@, local data: %@",updateRecord.last_update,lastUpdateFromLocalRecord]);
        }
        else 
        {
            NSLog(@"Server data and local data are the same");
        }
    }

そして私のデバッグの一部はこれを示しています:

checkliste ID: 21
server Date: ----- 
local Date: ----- 2012-10-29 10:13:46
difference of dates: 3810.000000
seconds between > 0
Server data is later than local data
server data: 2012-10-29 11:17:16, local data: 2012-10-29 10:13:46
4

1 に答える 1

1
NSLog(@"server Date: ----- %@",updateRecord.last_update);

あなたはserverDateここにログインしていないので、ホットリックスが示唆したように、それがゼロである可能性は十分にあります. nilObjective-C で にメッセージを送信すると、結果は0またはになりnilます。NSOrderedSame の値は何だと思いますか? 私はそれが0.

[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

日付フォーマッタの入力形式がログに記録されているものと正確に一致していないことに気付きました。おそらく、期待される入力と提供されているものの違いは、フォーマッタが日付を作成するのを妨げるのに十分です. の日付形式に秒を追加してみてくださいinputFormatter

于 2012-10-29T12:48:07.213 に答える