我有一个NSArray
含日期/时间NSStrings
采用以下格式:如何用日期时间值对NSArray进行排序?
2/2/2011 2:46:39 PM
2/4/2011 11:59:47 AM
…
其中的日期表示为月/日/年。
我该如何对NSArray进行排序,以确保最新的日期/时间在最上方?
我有一个NSArray
含日期/时间NSStrings
采用以下格式:如何用日期时间值对NSArray进行排序?
2/2/2011 2:46:39 PM
2/4/2011 11:59:47 AM
…
其中的日期表示为月/日/年。
我该如何对NSArray进行排序,以确保最新的日期/时间在最上方?
当你处理日期,请使用NSDate
而不是NSString
。此外,考虑时区也很重要 - Web服务是否提供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.
}
此转换array
,的NSStrings
阵列,以dateArray
,的NSDates
一个可变的阵列。日期格式化程序使用系统时区。如果你想使用UTC的时区:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"MM/DD/YYYY hh:mm:ss a"];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
已经这样做了,排数组很简单:即正在从Web服务返回
[dateArray sortUsingSelector:@selector(compare:)];
哇谢谢Bavarious!伟大的方法。 – jini 2011-05-11 12:27:04
使用方法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;
}
使用你自己的逻辑来梳理
使用本
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);
的NSString。 – jini 2011-05-11 03:58:27
第一个字段是月份。对不起,我应该提到这一点。 – jini 2011-05-11 04:03:50