2011-05-11 7 views
1

나는 다음과 같은 형식에 NSArray 포함하는 날짜/시간 NSStrings 있습니다NSArray를 날짜 시간 값으로 정렬하는 방법은 무엇입니까?

날짜가 월/일/년으로 표시됩니다
2/2/2011 2:46:39 PM 
2/4/2011 11:59:47 AM 
… 

.

어떻게이 NSArray를 정렬하여 최신 날짜/시간이 맨 위에 오도록해야합니까? 당신은 자신의 논리가

+0

하는 NSString. – jini

+0

첫 번째 필드는 월입니다. 나는 그것을 언급해야했다는 점에 유감이다. – jini

답변

3

을 정렬 두 날짜를 비교하는

+0

와우 감사 Bavarious! 훌륭한 접근 방식. – jini

0

사용 방법 compare,

샘플있는 NSDate의을 비교 한,

NSDate *dateOne = [NSDate dateWithString:@"2008-12-04 03:00:00 +0900"]; 
NSDate *dateTwo = [NSDate dateWithString:@"2008-12-04 04:00:00 +0900"]; 

switch ([dateOne compare:dateTwo]){ 
case NSOrderedAscending: 
NSLog(@”NSOrderedAscending”); 
break; 
case NSOrderedSame: 
NSLog(@”NSOrderedSame”); 
break; 
case NSOrderedDescending: 
NSLog(@”NSOrderedDescending”); 
break; 
} 

사용 날짜를 처리하려면대신 NSDate을 사용하십시오.. 또한 표준 시간대를 고려하는 것이 중요합니다. 웹 서비스가 UTC 또는 다른 표준 시간대로 날짜를 제공합니까?

먼저 문자열 배열을 날짜 배열로 변환해야합니다. 그렇지 않으면 비교를 위해 사용될 때마다 문자열을 날짜로 변환 할 것이고 문자열 수보다 더 많은 비교가있게 될 것입니다. 예를 들어

:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"MM/DD/YYYY hh:mm:ss a"]; 

NSMutableArray *dateArray = [NSMutableArray array]; 
for (NSString *dateString in array) { 
    NSDate *date = [formatter dateFromString:dateString]; 
    if (date) [dateArray addObject:date]; 
    // If the date is nil, the string wasn't a valid date. 
    // You could add some error reporting in that case. 
} 

dateArray-array, NSStrings 배열, NSDates의 가변 어레이로 변환한다. 날짜 포맷터는 시스템 시간대를 사용합니다. 당신은 시간대로 UTC를 사용하려면 :

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"MM/DD/YYYY hh:mm:ss a"]; 
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

배열을 정렬이 다 끝나면 간단하다 : 웹 서비스에서 반환되는

[dateArray sortUsingSelector:@selector(compare:)]; 
0

사용 당신이있어이

NSMutableArray *mutArr=[yourArray mutableCopy];//convert your NSArray into mutable array 
    NSDateFormatter *df=[[[NSDateFormatter alloc] init] autorealese]; 
    [df setDateFormat:@"MM/DD/YYYY hh:mm:ss a"]; 
    NSDate *compareDate; 
NSInteger index; 
for(int i=0;i<[mutArray count];i++) 
{ 
    index=i; 
    compareDate=[df dateFromString:[mutArray objectAtIndex:i]]; 
    NSDate *compareDateSecond; 
    for(int j=i+1;j<counter;j++) 
    { 
     compareDateSecond=[df dateFromString:[mutArr objectAtIndex:j]]; 
     NSComparisonResult result = [compareDate compare:compareDateSecond]; 
     if(result == NSOrderedAscending) 
     { 
      compareDate=compareDateSecond; 
      index=j; 
     } 
    } 
    if(i!=index) 
     [mutArr exchangeObjectAtIndex:i withObjectAtIndex:index]; 
} 
    } 

NSLog(@"%@",mutArr); 
+0

의견을 입력하는 데 약간의 노력을 기울여주세요. 이유는 무엇입니까? – Ishu

+0

나는 당신의 답변에 대해 투표하지 않았지만 당신이 버블 정렬과 같은 것을하고있는 것처럼 보였습니다.하지만 한번의 패스 만하기 때문에 작동하지 않습니다. 또한 거품 정렬이 매우 느립니다. (참고로, dateTwo가 선언되지 않았기 때문에 코드가 컴파일되지 않습니다.) – ThomasW

+1

편집 후에도 분류 코드는 여전히 작동하지 않습니다. 일반적으로 선형 시간으로 배열을 정렬 할 수는 없습니다. –

관련 문제