ios - 如何按降序对字符串中包含日期的数组进行排序?

标签 ios iphone objective-c nsdate nsdateformatter

这个问题在这里已经有了答案:





NSDateFormatter return incorrect date from string

(3 个回答)


8年前关闭。




我想按降序对包含日期字符串的数组进行排序,我已经尝试过 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);

我得到如下控制台输出:

2013-08-27 15:29:50.418 sample[3688:c07] tempArr is ( "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);

编辑放入字符串数组
NSMutableArray *correctOrderStringArray = [NSMutableArray array];

for (NSDate *date in tempArray) {
    NSString *dateString = [formatter stringFromDate:date];
    [correctOrderStringArray addObject:dateString];
}

NSLog(@"%@", correctOrderStringArray);

另外,阅读更多关于 NSDate 的信息, NSStringNSDateFormatter .尤其是他们如何互动。
NSDate是一个时间点。它不(也永远不会)包含任何格式信息。
NSDateFormatter不包含有关特定日期(即时间点)的任何信息。它用于获取日期并根据 NSDate 生成字符串和 format你给它。

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

关于ios - 如何按降序对字符串中包含日期的数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18462763/

相关文章:

ios - 如何在 swift 4 的 UILabel 中找到子字符串的框架?

iphone - 适用于iOS设备的最佳声音格式? (iPhone和iPad)

ios - 在 iOS 上流式传输 RTSP 时接收 "End of file"

ios - XCode 中需要的基本 Plist 帮助

iphone - 本地化我的 iphone 应用程序 plist 文件导致错误 "could not read data from ' myAppPath/myApp-Info.plist'

php - Xcode解析php返回的json错误

ios - UISwitch 无法正常工作

iphone - 如何使iPhone使用套接字与服务器通信?

objective-c - 使用 Objective-C 以编程方式释放系统内存

objective-c - 进行 22 种不同构建的最有效方法