3

我得到了一组在 UITableView 中显示的事件。每个事件都有一个开始日期和结束日期,它们之间有 1-3 天。

我正在尝试检测特定日期范围是否包括月初(例如:8 月 1 日),并向该表格视图单元格添加特殊标记。

我读过 NSDate 和日历操作是昂贵的操作,我的表格视图已经不是世界上最快的。如何有效地确定日期范围是否包括月初?

4

3 回答 3

3

检查两个结束日期的月份值,如果它们不同,则您有月份的开始,否则您没有。

编辑:首先检查任何端点(开始或结束)日期值等于 1。

于 2012-06-29T13:50:13.310 回答
3

好吧,务实地考虑一下,您可以检查每个日期的月份:

NSCalendar* calendar = [NSCalendar currentCalendar];

NSDateComponents* startComp = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:startDate];

NSDateComponents* endComp = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:endDate];

if([startComp month] != [endComp month]){
    // start of month included
}

你可以对这些天做同样的事情,如果endDate天的价值小于startDate天的价值,那么你知道你在某个地方有一个第一。显然,这种方式只有在事件持续不到一个月的情况下才能正常工作(你说他们这样做了)。

于 2012-06-29T13:51:48.050 回答
3

您可以检查结束日期是否低于开始日期。

例如:开始 = 6 月 30 日,结束 = 7 月 2 日。

NSDate * start, end;

NSInteger startDay = [[start descriptionWithCalendarFormat:@"%d" timeZone:nil locale:nil] intValue];
NSInteger endDay = [[start descriptionWithCalendarFormat:@"%d" timeZone:nil locale:nil] intValue];

if (endDay < startDay) {
    // bingo!
}
于 2012-06-29T13:52:32.070 回答