1

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

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

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

4

3 回答 3

1

我建议使用NSDateComponents,Apple 有使用它们的指南

Apple 的本指南解释了如何执行日期计算NSDateComponents以执行与您类似的任务。

于 2013-01-10T19:49:31.483 回答
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];
}

其余的很自然:要查看您的数组是否有日期,您可以使用此方法。

于 2013-01-10T19:56:51.730 回答
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];
    }
}

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

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

于 2013-01-10T20:41:32.227 回答