令人困惑的日期比较

时间:2011-02-22 17:30:28

标签: iphone objective-c

我对这段代码感到困惑:

for (int i = 0; i < [content count]; i++) {
    NSString *dateString = [self replaceCharacters:[[[content objectAtIndex:i] objectForKey:@"date"] objectForKey:@"text"]];
    NSLog(@"\n\n%i",[[dateFormatter stringFromDate:[originalDate dateFromString:[[[content objectAtIndex:i] objectForKey:@"date"] objectForKey:@"text"]]] intValue]);
    if ([[dateFormatter stringFromDate:[originalDate dateFromString:dateString]] intValue] >= [todayString intValue]) {
        [tempContent addObject:[content objectAtIndex:i]];
    }

}

我会解释:

我需要检查内容中每个对象的日期是否高于或等于今天的日期。如果是这样,它将被添加到tempContent。但tempContent计数等于内容计数。什么都没有排序......

有没有人看到解决方案?!

谢谢, mavrick3。

3 个答案:

答案 0 :(得分:1)

为什么不使用NSDate s -compare:方法?它会返回常量NSOrderedDescending,如果第一个日期更晚,NSOrderedAscending如果它更早,你会在它返回NSOrderedSame时发现它。

例如:

if ([originalDate compare:todayDate] == NSOrderedDescending) {
        [tempContent addObject:[content objectAtIndex:i]];
}

答案 1 :(得分:0)

你想使用NSDateComponents,而不是所有的stringFromDate东西。

有关详细信息,请参阅this answer

但基本上你会想要这样的东西:

unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* origComponents = [calendar components:flags fromDate:originalDate];
NSDate* origDateOnly = [calendar dateFromComponents:origComponents];

for (int i = 0; i < [content count]; i++) 
{
    NSDate *date = [[content objectAtIndex:i] objectForKey:@"date"];
    NSDateComponents* components = [calendar components:flags fromDate:date];
    NSDate* dateOnly = [calendar dateFromComponents:components];

    if ([origDateOnly compare:dateOnly] == (NSOrderedSame || NSOrderedAscending)) 
    {
         [tempContent addObject:[content objectAtIndex:i]];
    }
}

答案 2 :(得分:0)

看看Erica Sadun的NSDate-Extensions。它有许多有用的方法,如isEqualToDateIgnoringTime:isLaterThanDate:

这有助于我解决与你类似的问题。