如何用date时间值sortingNSArray?
我有一个NSArray
包含date/时间NSStrings
在以下格式:
2/2/2011 2:46:39 PM 2/4/2011 11:59:47 AM …
date表示为月/日/年。
如何sorting这NSArray确保最新的date/时间在顶部?
当你处理date时,使用NSDate
而不是NSString
。 此外,重要的是考虑时区 – Web服务是否提供UTC或其他时区的date?
你应该首先将你的string数组转换成一个date数组。 否则,只要用于比较,就会将string转换为date,并且会有比string数量更多的比较。
例如:
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. }
这将array
( NSStrings
的数组)转换为dateArray
的可变数组)。 date格式化程序使用系统时区。 如果您想使用UTC作为时区:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter setDateFormat:@"MM/DD/YYYY hh:mm:ss a"]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
这样做,sorting数组是微不足道的:
[dateArray sortUsingSelector:@selector(compare:)];
使用方法比较来比较两个date,
样品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; }
用你自己的逻辑来sorting
用这个
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);