首页 文章

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

提问于
浏览
1

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

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

任何帮助将不胜感激 . 谢谢!

3 回答

  • 1

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

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

  • 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];
    }
    

    其余的是自然的:看看你的数组是否有一个日期,你可以使用这种方法 .

  • 1

    没有编译 - 可能有一些tupos .

    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];
        }
    }
    

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

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

相关问题