sur*_*her 1 iphone objective-c nsdate nsdateformatter ios
我想按降序对包含日期字符串的数组进行排序,我尝试了SO答案,但输出错误了.
请参阅我的代码如下:
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);
Run Code Online (Sandbox Code Playgroud)
我得到如下控制台输出:
2013-08-27 15:29:50.418样本[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"会在月份出现,而且日期格式也不像我指定的格式.
好吧,首先,你实际上并没有对代码中的任何东西进行排序......
你应该这样做......
// 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);
Run Code Online (Sandbox Code Playgroud)
编辑投入STRING ARRAY
NSMutableArray *correctOrderStringArray = [NSMutableArray array];
for (NSDate *date in tempArray) {
NSString *dateString = [formatter stringFromDate:date];
[correctOrderStringArray addObject:dateString];
}
NSLog(@"%@", correctOrderStringArray);
Run Code Online (Sandbox Code Playgroud)
另外,请阅读更多关于NSDate,NSString和NSDateFormatter.特别是他们如何互相交流.
NSDate是一个时间点.它不(并且从不)包含任何格式信息.
NSDateFormatter没有关于特定日期(即时间点)的任何信息.它是用来拍摄日期和生产基于该字符串NSDate和format你给它.