如何从数据[iphone]按特定顺序对日期进行排序

时间:2011-09-26 10:32:28

标签: iphone objective-c nsdate

我从数据库中获得了某些事件及其升序的日期。

现在,我想要一些按钮..

在这个结构中......

- ########上周##### ----
- ########昨天##### ----

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

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

现在当我按下尊敬的按钮.. 应该显示那个受尊重的持续时间内的事件..

我的意思是所有数据都应与今天进行比较,所有数据都应该按此顺序缩短。

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

1 个答案:

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

所以,你需要做的是:

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

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"date > %@ AND date < %@", tomorrow, nextWeek];
    
  3. 您可以使用一种方便的方法来获取日期,方法是使用此方法向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];