Как отсортировать NSArray со значениями даты и времени? - PullRequest
1 голос
/ 11 мая 2011

У меня есть NSArray, содержащий дату / время NSStrings в следующем формате:

2/2/2011 2:46:39 PM
2/4/2011 11:59:47 AM
…

, где дата представляется в виде месяца / дня / года.

Как сделатьЯ сортирую этот NSArray, чтобы убедиться, что самые новые дата / время находятся вверху?

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Когда вы имеете дело с датами, используйте NSDate вместо NSString. Кроме того, важно учитывать часовой пояс - предоставляет ли веб-служба даты в формате UTC или в каком-либо другом часовом поясе?

Сначала вы должны преобразовать ваш массив строк в массив дат. В противном случае вы будете конвертировать строку в дату всякий раз, когда она используется для сравнения, и будет больше сравнений, чем количество строк.

Например:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"MM/DD/YYYY hh:mm:ss a"];

NSMutableArray *dateArray = [NSMutableArray array];
for (NSString *dateString in array) {
    NSDate *date = [formatter dateFromString:dateString];
    if (date) [dateArray addObject:date];
    // If the date is nil, the string wasn't a valid date.
    // You could add some error reporting in that case.
}

Преобразует array, массив NSStrings, в dateArray, изменяемый массив NSDates. Форматер даты использует часовой пояс системы. Если вы хотите использовать UTC в качестве часового пояса:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"MM/DD/YYYY hh:mm:ss a"];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

После этого сортировка массива тривиальна:

[dateArray sortUsingSelector:@selector(compare:)];
0 голосов
/ 11 мая 2011

используйте это

    NSMutableArray *mutArr=[yourArray mutableCopy];//convert your NSArray into mutable array
    NSDateFormatter *df=[[[NSDateFormatter alloc] init] autorealese];
    [df setDateFormat:@"MM/DD/YYYY hh:mm:ss a"];
    NSDate *compareDate;
NSInteger index;
for(int i=0;i<[mutArray count];i++)
{
    index=i;
    compareDate=[df dateFromString:[mutArray objectAtIndex:i]];
    NSDate *compareDateSecond;
    for(int j=i+1;j<counter;j++)
    {
        compareDateSecond=[df dateFromString:[mutArr objectAtIndex:j]];
        NSComparisonResult result = [compareDate compare:compareDateSecond];
       if(result == NSOrderedAscending)
       {
           compareDate=compareDateSecond;
           index=j;
       }
    }
    if(i!=index)
      [mutArr exchangeObjectAtIndex:i withObjectAtIndex:index];
}
    }

NSLog(@"%@",mutArr);
0 голосов
/ 11 мая 2011

Использовать метод сравнить для сравнения двух дат,

Пример сравнения NSDate,

NSDate *dateOne = [NSDate dateWithString:@"2008-12-04 03:00:00 +0900"];
NSDate *dateTwo = [NSDate dateWithString:@"2008-12-04 04:00:00 +0900"];

switch ([dateOne compare:dateTwo]){
case NSOrderedAscending:
NSLog(@”NSOrderedAscending”);
break;
case NSOrderedSame:
NSLog(@”NSOrderedSame”);
break;
case NSOrderedDescending:
NSLog(@”NSOrderedDescending”);
break;
}

Используйте свою собственную логику для сортировки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...