2016-09-03 5 views
1

날짜를 문자열 형식으로 포함하는 NSMutableArray가 있습니다. 여기에 날짜의 오름차순으로 배열을 정렬해야합니다. 나는 강력한 텍스트날짜 배열을 오름차순으로 정렬하는 방법

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. 

을 포함, 배열 당신은 문자열 배열과 날짜를 정렬하는 데이 방법처럼 sortedArrayUsingComparator를 사용할 필요가

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

하면 날짜 형식 mm/일 또는 일/월 –

답변

5

같이 포함되어 있습니다.

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]; 
}]; 

참고 : 날짜에 따라 날짜의 설정 메이트는, 내가 MM/dd/yyyy을 사용하는 이유 당신의 날짜가 dd/MM/yyyy가 그를 사용 편대 포함 된 경우 예, 그게 전부에서 날짜 편대를 술어하기 어렵다.

+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); 
관련 문제