如何从一系列NSDates中找到失踪的日子?

时间:2013-01-10 19:42:31

标签: ios objective-c nsmutablearray nsdate

我有一个NSMutableArray的有序NSDates。我正在寻找一种方法,它返回在数组中最早的日期和现在之间原始数组中缺少的所有日期(以NSDate形式)。在检查平等时,我只关心NSDate的年,月和日部分。例如:

NSMutableArray *missingDates;
for (NSDate *date in allDatesBetweenOldestDateAndNow){
    if (date isNotIn: myDates)
        [missingDates addObject:date];
return missingDates;

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

我建议使用NSDateComponents,Apple有guide使用它们。

Apple的

This guide解释了如何执行计算日期NSDateComponents以执行与您类似的任务。

答案 1 :(得分:1)

您可能需要继承NSDate并添加一个比较日期而不考虑时间的方法:

- (BOOL) isEqual:(id)object
{
    NSDateComponents* c1= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: self ];
    NSDateComponents* c2= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: object ];
    return [c1 isEqual: c2];
}

其余的很自然:看看你的阵列是否有日期可以使用这种方法。

答案 2 :(得分:1)

未编译 - 可能存在一些问题。

NSDateFormatter* dayFmt = [[NSDateFormatter alloc] init];
[dayFmt setTimeZone:<whatever time zone you want>];
[dayFmt setDateFormat:@"g"];
NSInteger lastDay = [[dayFmt stringFromDate:startDate] integerValue];
// Note:  We assume that myDates is sorted, as stated.
for (NSDate* myDate in myDates) {
    NSInteger myDay = [[dayFmt stringFromDate:myDate] integerValue];
    while (myDay > lastDay+1) {
        lastDay++;
        NSDate* newDate = [dayFmt dateFromString:[NSString stringWithFormat:@"%d", lastDay]];
        [missingDates addObject:newDate];
    }
}

(我将把它作为练习让用户弄清楚如何填写最后一个数组条目和某个任意结束日期之间的任何缺失日期。)

(还应该注意的是,代码假设数组中没有重复的日期。容易处理,但用户的另一个练习。)