0

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

“2011 年 9 月 15 日上午 12:00:00”、“2011 年 10 月 15 日上午 12:00:00”、“2011 年 11 月 16 日上午 12:00:00”

如何按降序对该数组进行排序?顺序应该是,首先按年份,然后是月份,然后是日期,然后是时间。

请分享你的想法。谢谢

4

5 回答 5

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

原来的答案就在这里!

于 2011-09-23T04:57:48.383 回答
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]);
于 2011-09-23T05:46:56.810 回答
1

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

两者都可以通过使用 sortUsingFunction 调用来完成。

于 2011-09-23T04:45:02.783 回答
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;
于 2011-09-23T04:34:13.837 回答
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 对象,在比较它们之后,您可以使用冒泡排序方法对数组进行排序。

于 2011-09-23T04:37:09.747 回答