Сортировать NSDate по порядку, игнорируя время - PullRequest
1 голос
/ 04 декабря 2010

Я хочу отсортировать массив NSDates только по их дню месяцу и году, поэтому ни по одной единице времени.Как я могу это сделать, потому что я не вижу способа вывести отдельные части NsDate «наружу».

1 Ответ

4 голосов
/ 04 декабря 2010

Смотрите этот пост для сортировки массива, содержащего объекты NSDate:

Сортировать NSArray из строк или объектов даты

и мой за удаление времени:

Усечение NSDate (время обнуления)

Сложение

1) Циклически перебирайте свой массив объектов NSDate, удаляя (обнуляя) временные компоненты и добавляя их в новый массив:

NSMutableArray *newDateArray = [NSMutableArray array];
for (NSDate *d in myDateArray)
{
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [calendar components:flags fromDate:d];
    //Taking the time zone into account
    NSDate *dateOnly = [[calendar dateFromComponents:components] dateByAddingTimeInterval:[[NSTimeZone localTimeZone]secondsFromGMT]];
    [newDateArray addObject:dateOnly];
}

2) Теперь, когда у вас есть новый массив, состоящий из объектов NSDate с нулевыми компонентами времени, вы можете отсортировать их:

[newDateArray sortUsingSelector:@selector(compare:)];

Эта строка сортирует массив, используя собственный метод сравнения объекта NSDate.

...