如何按降序对string中包含date的数组进行sorting?
我想按降序sorting包含datestring的数组,我已经尝试过所以答案,但我得到错误的输出。
请看我的代码如下:
NSArray *dateArray=[NSArray arrayWithObjects:@"01/12/2012",@"01/26/2011",@"02/09/2005",@"02/24/2006",@"03/19/2007",@"07/14/2011",@"08/17/2007",@"10/04/2007",@"10/31/2006",@"12/05/2012",@"12/06/2006",@"12/23/2008",nil]; NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/DD/YYYY"]; NSMutableArray *tempArr=[[NSMutableArray alloc]init]; for (int i=0; i<[dateArray count]; i++) { NSString *dt=[dateArray objectAtIndex:i]; NSDate *newDt=[formatter dateFromString:dt]; [tempArr addObject:newDt]; } NSLog(@"tempArr is %@",tempArr);
我得到如下的控制台输出:
2013-08-27 15:29:50.418 sample [3688:c07] tempArr是(“2011-12-24 18:30:00 +0000”,“2010-12-18 18:30:00 +0000”,“ 2004-12-18 18:30:00 +0000“,”2005-12-24 18:30:00 +0000“,”2006-12-23 18:30:00 +0000“,”2010-12-18 18:30:00 +0000“,”2006-12-23 18:30:00 +0000“,”2006-12-23 18:30:00 +0000“,”2005-12-24 18:30:00 +0000“,”2011-12-24 18:30:00 +0000“,”2005-12-24 18:30:00 +0000“,”2007-12-22 18:30:00 +0000“)
我不知道为什么“12”会在月份出现,而且date格式也不像我指定的格式。
那么,首先,你实际上并没有对你的代码进行sorting。
你应该做这样的事情…
// create the string array NSArray *dateArray = @[@"01/12/2012", @"01/26/2011", @"02/09/2005", @"02/24/2006", @"03/19/2007", @"07/14/2011", @"08/17/2007", @"10/04/2007", @"10/31/2006", @"12/05/2012", @"12/06/2006", @"12/23/2008"]; // create the date formatter with the correct format NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MM/dd/yyyy"]; NSMutableArray *tempArray = [NSMutableArray array]; // fast enumeration of the array for (NSString *dateString in dateArray) { NSDate *date = [formatter dateFromString:dateString]; [tempArray addObject:date]; } // sort the array of dates [tempArray sortUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) { // return date2 compare date1 for descending. Or reverse the call for ascending. return [date2 compare:date1]; }]; NSLog(@"%@", tempArray);
编辑进入STRINGarrays
NSMutableArray *correctOrderStringArray = [NSMutableArray array]; for (NSDate *date in tempArray) { NSString *dateString = [formatter stringFromDate:date]; [correctOrderStringArray addObject:dateString]; } NSLog(@"%@", correctOrderStringArray);
另外,阅读更多有关NSDate
, NSString
和NSDateFormatter
。 特别是他们如何互相交stream。
NSDate
是一个时间点。 它不(并且从不)包含任何格式化信息。
NSDateFormatter
不包含有关特定date的任何信息(即时间点)。 它用于获取date并根据NSDate
和您提供的format
生成一个string。
尝试
[formatter setDateFormat:@"MM/dd/yyyy"]
而不是你在第3行。这应该给你你期待的date格式。 关于sorting,我有点困惑。 你没有任何代码。 你想sorting或只是格式化datestring?
你必须build立一个合适的比较器:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; [formatter setLocale:enUSPOSIXLocale]; [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [formatter setDateFormat:@"MM/dd/yyyy"]; NSComparator myDateComparator = ^NSComparisonResult(id obj1, id obj2) { NSDate *date1 = [formatter dateFromString:obj1]; NSDate *date2 = [formatter dateFromString:obj2]; return [date2 compare:date1]; // sort in descending order };
那么简单地通过执行sorting数组:
NSArray *dateArray = @[@"01/12/2012", @"01/26/2011", @"02/09/2005", @"02/24/2006", @"03/19/2007", @"07/14/2011", @"08/17/2007", @"10/04/2007", @"10/31/2006", @"12/05/2012", @"12/06/2006", @"12/23/2008"]; NSArray *sortedArray = [dateArray sortedArrayUsingComparator:myDateComparator]; NSLog(@"Sorted array is %@", sortedArray);
这种sortingstring (而不是任何修改的数组)。 你也可以使用string操作并将m / d / y转换为ymd,但是我认为对于小数据集这种方法可以。