NSDate比较总是返回NSOrderedSame

时间:2012-10-29 10:48:58

标签: ios compare nsdate

我的NSDate比较存在问题。我尝试了几种解决方案,我在谷歌上搜索我的问题,但没有任何变化:我比较两个日期,我总是得到NSOrderedSame或NSTimeIntervals之间的差异= 0.0000;

我的代码如下所示:

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

1 个答案:

答案 0 :(得分:1)

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

你没有在这里记录serverDate,所以正如Hot Licks建议的那样,它很可能是零。您可以在Objective-C中向nil发送消息,结果为0nil。您认为NSOrderedSame的价值是什么?我打赌它是0的一美元。

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

我注意到您的日期格式化程序的输入格式与您正在记录的内容不完全匹配,因此预期输入与您提供的内容之间的差异可能足以阻止格式化程序创建日期。尝试为inputFormatter的日期格式添加秒数。