2011-09-26 44 views
0

我已经从数据库中获得了某些事件的日期和升序。如何根据某些特定的顺序从数据中排序日期[iphone]

现在,我想需要几个按钮..

在这种结构

...

- ########上周##### ----
- ########昨日##### ----

- ########今天##### ----

- ########明天##### ----
- ########下周Week ##### ----

现在,当我按下按钮推崇.. 在尊重时间的事件应该显示了..

我的意思是所有的数据应该与今天相比较,所有的数据应该因此而受到短路。 。

任何人都可以给我一个想法或逻辑吗?

+0

,你用你的数据库什么样的前端?它是核心数据还是SQL,还是其他?您是否正在寻找可以自动确定“上周”时间的日期的代码,或者您是否在寻找有关创建谓词的帮助? – Jim

+0

我正在使用SQLite和我不希望他们自动确定,我想排序他们..就像今天是27九月..如果我有日期,说我是从oct3然后它应该自动添加在块(数组) –

+0

因此,如果我理解正确,你需要计算“下周”这个与任意日期相关的开始和结束日期。然后,当按下“next week”按钮时,会得到这两个日期(开始日期和结束日期),然后可以将这些日期设置为约束条件,执行查询并显示结果。这是否说明了它?哪部分需要帮助? – Jim

回答

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

所以,你需要做的是:

  1. 获取日期所有相关的日期类别
  2. 当你推一个按钮,构建一个谓词以仅检索两个日期之间的对象。例如,获取在“明天”类别中的所有对象:

    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]; 
相关问题