Когда вы имеете дело с датами, используйте 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:)];