如何按降序对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); 

另外,阅读更多有关NSDateNSStringNSDateFormatter 。 特别是他们如何互相交stream。

NSDate是一个时间点。 它不(并且从不)包含任何格式化信息。

NSDateFormatter不包含有关特定date的任何信息(即时间点)。 它用于获取date并根据NSDate和您提供的format生成一个string。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

尝试

[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,但是我认为对于小数据集这种方法可以。