如何用date时间值sortingNSArray?

我有一个NSArray包含date/时间NSStrings在以下格式:

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

date表示为月/日/年。

如何sorting这NSArray确保最新的date/时间在顶部?

当你处理date时,使用NSDate而不是NSString 。 此外,重要的是考虑时区 – Web服务是否提供UTC或其他时区的date?

你应该首先将你的string数组转换成一个date数组。 否则,只要用于比较,就会将string转换为date,并且会有比string数量更多的比较。

例如:

 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. } 

这将arrayNSStrings的数组)转换为dateArray的可变数组)。 date格式化程序使用系统时区。 如果您想使用UTC作为时区:

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

这样做,sorting数组是微不足道的:

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

使用方法比较来比较两个date,

样品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; } 

用你自己的逻辑来sorting

用这个

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