Iphone 如何使用日期时间值对NSArray排序?

Iphone 如何使用日期时间值对NSArray排序?,iphone,ios,nsarray,Iphone,Ios,Nsarray,我有一个NSArray包含日期/时间NSStrings,格式如下: 2/2/2011 2:46:39 PM 2/4/2011 11:59:47 AM … 其中日期表示为月/日/年 如何对该NSArray排序以确保最新日期/时间位于顶部?使用方法比较两个日期 样本数据比较 NSDate *dateOne = [NSDate dateWithString:@"2008-12-04 03:00:00 +0900"]; NSDate *dateTwo = [NSDate dateWithString:

我有一个
NSArray
包含日期/时间
NSStrings
,格式如下:

2/2/2011 2:46:39 PM
2/4/2011 11:59:47 AM
…
其中日期表示为月/日/年

如何对该NSArray排序以确保最新日期/时间位于顶部?

使用方法比较两个日期

样本数据比较

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;
}
使用您自己的逻辑进行排序

    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);
NSMutableArray*mutArr=[yourArray mutableCopy]//将NSArray转换为可变数组
NSDateFormatter*df=[[NSDateFormatter alloc]init]autorealese];
[df setDateFormat:@“MM/DD/YYYY hh:MM:ss a”];
NSDate*比较;
NSInteger指数;

对于(int i=0;i当您处理日期时,使用<代码> NSDATE <代码>而不是<代码> NScord。此外,重要的是考虑时区——Web服务是否提供UTC或其他时区中的日期?< /P> 您应该首先将字符串数组转换为日期数组。否则,无论何时使用字符串进行比较,您都会将其转换为日期,并且比较的数量将超过字符串的数量

例如:

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.
}
这将
数组
(由
NSStrings
组成的数组)转换为
日期数组
(由
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:)];

从web服务返回的NSString。第一个字段是月份。很抱歉,我应该提到这一点。请在键入注释时多加努力,说明为什么会进行此否决投票。我没有否决您的答案,但看起来您正在执行类似于气泡排序的操作,但由于它只执行一次,因此将不起作用。此外,气泡ort非常慢。(注意,你的代码不会编译,因为dateTwo没有声明。)即使在你编辑之后,排序代码仍然不起作用。一般来说,你不能在线性时间内对数组排序。谢谢@BaVariable和@ThomasW,现在我想它肯定能起作用。在匆忙中,我犯了一个错误。