0

次のような日付文字列を含む配列があります

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

この配列を降順に並べ替えるにはどうすればよいですか? 順序は、最初に年、次に月、次に日付、そして時間でソートする必要があります。

あなたのアイデアを共有してください。ありがとうございました

4

5 に答える 5

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 に答える
2

NSString形式のNSDatesを並べ替えることは、文字列の並べ替えとして並べ替えることができる"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 に答える
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

2 つの日付を比較する方法があります。

 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 に答える