2016-09-03 19 views
1

文字列形式の日付を含むNSMutableArrayがあります。ここでは、日付の昇順に配列をソートする必要があります。私は日付の配列をiosで昇順に並べ替える方法

NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; 
NSArray *descriptors=[NSArray arrayWithObject: descriptor]; 
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors]; 

強いテキストを使用しかし、それだけで一日と月の昇順の面で日付を並べ替えます。年は考慮されません。私を助けてください。 例えば、アレイは、上記のコード行を使用した後

03/09/2017, 03/06/2016, 01/06/2016,01/04/2016 and 03/01/2017. 

が含まれ、配列は次のように含まれ、

01/04/2018, 01/06/2016, 03/01/2017, 03/06/2016, 03/09/2016 
+0

あなたは私はすでにこのコードを使用しているが、それでも私はドン形式MM/DDまたはDD/MM日付 –

答えて

5

あなたはString配列で日付を並べ替えるために、この方法のようにsortedArrayUsingComparatorを使用する必要があります。

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MM/dd/yyyy"]; 
NSArray *sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { 
    NSDate *d1 = [df dateFromString: obj1]; 
    NSDate *d2 = [df dateFromString: obj2]; 
    return [d1 compare: d2]; 
}]; 

注:お使いの日付によると、あなたの例から日付ギ述語が難しい日付の設定メートである、あなたの日付がdd/MM/yyyyはその後、それを使用ギ含まれている場合、私は、MM/dd/yyyyを使用している理由thatsの。

+0

申し訳ありません」正しい答えを得ること – hilaj

+0

あなたの応答に感謝します。 – hilaj

+0

日付の形式を教えてくれますか?それはdd/MMまたはMM/ddという意味ですか? –

1

あなたのコードは正確ですが、日付の形式は間違っています。

このコードを試してみてください。

NSMutableArray *dateArray = [[NSMutableArray alloc] initWithArray: @[@"03/09/2017", @"03/06/2016", @"01/06/2016",@"01/04/2016", @"03/01/2017"]]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
NSDate *date; 
for (int i = 0; i < dateArray.count; i++) { 
    [formatter setDateFormat:@"MM/dd/yyyy"]; // Please your date format set. 
    date = [formatter dateFromString:[dateArray objectAtIndex:i]]; 
    [formatter setDateFormat:@"yyyy/MM/dd"]; 
    [dateArray replaceObjectAtIndex:i withObject:[formatter stringFromDate:date]]; 
} 
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; 
NSArray *descriptors=[NSArray arrayWithObject: descriptor]; 
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors]; 

NSLog(@"Array: %@",reverseOrder); 
1

コードの下に試してみてください:

NSArray *strDateArray = [[NSArray alloc] initWithObjects:@"03/09/2017",@"03/06/2016", @"01/06/2016",@"01/04/2016",@"03/01/2017", nil]; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"MM/dd/yyyy"]; 

    NSMutableArray *dateArray = [[NSMutableArray alloc] init]; 

    for (NSString *dateString in strDateArray) { 
     NSDate *date = [formatter dateFromString:dateString]; 
     [dateArray addObject:date]; 
    } 

    // sort array of dates 
    [dateArray sortUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) { 
     // return date1 compare date2 for ascending. And reverse the call for ascending. 
     return [date1 compare:date2]; 
    }]; 

    NSLog(@"dateArray %@", dateArray); 
    NSMutableArray *sortedDateArray = [[NSMutableArray alloc] init]; 

    for (NSDate *date in dateArray) { 
     NSString *dateString = [formatter stringFromDate:date]; 
     [sortedDateArray addObject:dateString]; 
    } 

    NSLog(@"sortedDateArray %@", sortedDateArray); 
関連する問題