如何对包含iphone sdk中的日期的数组进行排序

时间:2011-09-23 04:29:00

标签: iphone nsmutablearray date-sorting

我有一个包含日期字符串的数组,如

  

“9/15/2011 12:00:00 AM”,“10/15/2011 12:00:00 AM”,“11/16/2011 12:00:00 AM”

如何按降序对此数组进行排序? 订单应按年份排序,按年份,按月,然后按日期再按时间排序。

请分享您的想法。 谢谢

5 个答案:

答案 0 :(得分:2)

NSDates NSString 格式中排序几乎是不可能的,除非它们的格式为“YYYYMMddHHmmss”,你可以排序为排序字符串。请参阅 @Daniel R Hicks 答案。

在解析并从Web服务添加日期时,将字符串转换为 NSDate

NSString *dateStr = ...
NSDateFormatter *df = ;[NSDateFormatter alloc] init];
[df setDateFormat:@"M/dd/YYYY hh:mm:ss a"];

[datesArray addObject:[df dateFromString:dateStr]];

排序,

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

original answer is here!

答案 1 :(得分:2)

尝试下面列出的代码。它会按升序给出排序日期。

NSMutableArray *arraydate=[[NSMutableArray alloc] init];
[arraydate addObject:@"22/7/2010"];
[arraydate addObject:@"1/1/1988"];

[arraydate addObject:@"22/7/1966"];

[arraydate addObject:@"22/7/2000"];

[arraydate addObject:@"1/7/2010"];

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

NSLog(@"array=%@",[arraydate description]);

答案 2 :(得分:1)

如果它们已经是字符串,你可以将它们转换为NSDates(从而转换为NSTimeIntervals)并对它们进行排序,或者有效地将数字重新排列为YYMMDDHHmmss,其中HH已被转换为00-23表示。

可以使用sortUsingFunction调用来完成。

答案 3 :(得分:0)

static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |NSWidthInsensitiveSearch | NSForcedOrderingSearch;

    NSLocale *currentLocale = [NSLocale currentLocale];

    NSArray *sortArray = [iArray sortedArrayUsingComparator:^(id string1, id string2) {

        NSRange string1Range = NSMakeRange(0, [string1 length]);

        //if([string2 isEqualToString:@"#"])
            //return -1;

        return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
    }];

    return sortArray;

答案 4 :(得分:0)

有一种比较两个日期的方法。

 int interval = [date1 compare:date2];

        if (interval == 1)
        {
            NSLog(@"Right hand side date is earlier");
        }
        else if (interval == -1)
        {
            NSLog(@"Left hand side date is earlier");
        }

        else 
        {
            NSLog(@"Both Dates are equal");
        }

您可以使用此方法但请确保您的date1和date2是NSDate对象,并且在比较它们之后,您可以使用气泡排序方法对其进行排序。