我从数据库中获得了某些事件及其升序的日期。
现在,我想要一些按钮..
在这个结构中......
- ########上周##### ----
- ########昨天##### ----
- ########今天##### ----
- ########明天##### ----
- ########下周##### ----
现在当我按下尊敬的按钮.. 应该显示那个受尊重的持续时间内的事件..
我的意思是所有数据都应与今天进行比较,所有数据都应该按此顺序缩短。
任何人都可以给我一个想法或逻辑吗?
答案 0 :(得分:0)
处理日期的最佳方法是使用NSDateComponents。 例如,要获取明天使用的日期:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comp = [[[NSDateComponents alloc] init] autorelease];
[comp setDay:1];
NSDate *today = [NSDate date];
NSDate *tomorrow = [cal dateByAddingComponents:comp toDate:today options:0];
所以,你需要做的是:
按下按钮时,构建谓词以仅检索两个日期之间的对象。例如,获取“明天”类别中的所有对象:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"date > %@ AND date < %@", tomorrow, nextWeek];
您可以使用一种方便的方法来获取日期,方法是使用此方法向NSDate添加类别:
@implementation NSDate (Components)
-(NSDate *) dateByAddingCalendarUnit:(NSCalendarUnit)calendarUnit andCount:(NSInteger) count
{
NSDateComponents *comp = [[NSDateComponents alloc] init];
switch (calendarUnit) {
case NSSecondCalendarUnit:
[comp setSecond:count];
break;
case NSMinuteCalendarUnit:
[comp setMinute:count];
break;
case NSHourCalendarUnit:
[comp setHour:count];
break;
case NSDayCalendarUnit:
[comp setDay:count];
break;
case NSWeekCalendarUnit:
[comp setWeek:count];
break;
case NSWeekdayCalendarUnit:
[comp setWeekday:count];
break;
case NSWeekdayOrdinalCalendarUnit:
[comp setWeekdayOrdinal:count];
break;
case NSMonthCalendarUnit:
[comp setMonth:count];
break;
case NSYearCalendarUnit:
[comp setYear:count];
break;
case NSEraCalendarUnit:
[comp setEra:count];
break;
default:
break;
}
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *newDate = [cal dateByAddingComponents:comp toDate:self options:0];
[comp release];
return newDate;
}
@end
并使用这样的方法:
NSDate *lastWeek = [[NSDate date] dateByAddingCalendarUnit:NSWeekCalendarUnit andCount:-1];