如何在 ios 中按升序对日期数组进行排序
how to sort array of dates in ascending order in ios
我有一个包含字符串格式日期的 NSMutableArray。在这里,我需要按照日期的升序对该数组进行排序。我使用了 strong text
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
但它只按照日和月的升序对日期进行排序。不考虑年份。请帮我。
例如,Array 包含
03/09/2017, 03/06/2016, 01/06/2016,01/04/2016 and 03/01/2017.
使用上面的代码行后,Array contains like,
01/04/2018, 01/06/2016, 03/01/2017, 03/06/2016, 03/09/2016
您需要像这样使用sortedArrayUsingComparator
来使用字符串数组对日期进行排序。
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSArray *sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
NSDate *d1 = [df dateFromString: obj1];
NSDate *d2 = [df dateFromString: obj2];
return [d1 compare: d2];
}];
注意:设置日期格式根据你的日期,很难从你的例子中预测日期格式,这就是我使用MM/dd/yyyy
的原因,如果你的日期包含甲酸盐 dd/MM/yyyy
然后使用它。
您的代码正确,但日期格式错误。
试试这个代码:
NSMutableArray *dateArray = [[NSMutableArray alloc] initWithArray: @[@"03/09/2017", @"03/06/2016", @"01/06/2016",@"01/04/2016", @"03/01/2017"]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *date;
for (int i = 0; i < dateArray.count; i++) {
[formatter setDateFormat:@"MM/dd/yyyy"]; // Please your date format set.
date = [formatter dateFromString:[dateArray objectAtIndex:i]];
[formatter setDateFormat:@"yyyy/MM/dd"];
[dateArray replaceObjectAtIndex:i withObject:[formatter stringFromDate:date]];
}
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
NSLog(@"Array: %@",reverseOrder);
请尝试以下代码:
NSArray *strDateArray = [[NSArray alloc] initWithObjects:@"03/09/2017",@"03/06/2016", @"01/06/2016",@"01/04/2016",@"03/01/2017", nil];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSMutableArray *dateArray = [[NSMutableArray alloc] init];
for (NSString *dateString in strDateArray) {
NSDate *date = [formatter dateFromString:dateString];
[dateArray addObject:date];
}
// sort array of dates
[dateArray sortUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) {
// return date1 compare date2 for ascending. And reverse the call for ascending.
return [date1 compare:date2];
}];
NSLog(@"dateArray %@", dateArray);
NSMutableArray *sortedDateArray = [[NSMutableArray alloc] init];
for (NSDate *date in dateArray) {
NSString *dateString = [formatter stringFromDate:date];
[sortedDateArray addObject:dateString];
}
NSLog(@"sortedDateArray %@", sortedDateArray);
对于Swift 4.0
let formater = DateFormatter()
formater.dateFormat = "MM/dd/yyyy" //date formate should be according to your date formate
let sortedArray=arrayToSort.sorted(){
(obj1, obj2) in
let date1=formater.date(from: obj1)
let date2=formater.date(from: obj2)
return date1!<date2!
}
//你可以根据你的代码更改日期格式
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSArray *sortedArray = [YourArraysortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2)
{
NSString *strDateObj1 = [NSString stringWithFormat:@"%@",[obj1 valueForKey:@"BirthDate"]];
NSString *strDateObj2 = [NSString stringWithFormat:@"%@",[obj2 valueForKey:@"BirthDate"]];
NSDate *d1 = [df dateFromString: strDateObj1];
NSDate *d2 = [df dateFromString: strDateObj2];
return [d1 compare: d2];
}];
NSLog(@"%@", sortedArray)
我有一个包含字符串格式日期的 NSMutableArray。在这里,我需要按照日期的升序对该数组进行排序。我使用了 strong text
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
但它只按照日和月的升序对日期进行排序。不考虑年份。请帮我。 例如,Array 包含
03/09/2017, 03/06/2016, 01/06/2016,01/04/2016 and 03/01/2017.
使用上面的代码行后,Array contains like,
01/04/2018, 01/06/2016, 03/01/2017, 03/06/2016, 03/09/2016
您需要像这样使用sortedArrayUsingComparator
来使用字符串数组对日期进行排序。
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSArray *sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
NSDate *d1 = [df dateFromString: obj1];
NSDate *d2 = [df dateFromString: obj2];
return [d1 compare: d2];
}];
注意:设置日期格式根据你的日期,很难从你的例子中预测日期格式,这就是我使用MM/dd/yyyy
的原因,如果你的日期包含甲酸盐 dd/MM/yyyy
然后使用它。
您的代码正确,但日期格式错误。
试试这个代码:
NSMutableArray *dateArray = [[NSMutableArray alloc] initWithArray: @[@"03/09/2017", @"03/06/2016", @"01/06/2016",@"01/04/2016", @"03/01/2017"]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *date;
for (int i = 0; i < dateArray.count; i++) {
[formatter setDateFormat:@"MM/dd/yyyy"]; // Please your date format set.
date = [formatter dateFromString:[dateArray objectAtIndex:i]];
[formatter setDateFormat:@"yyyy/MM/dd"];
[dateArray replaceObjectAtIndex:i withObject:[formatter stringFromDate:date]];
}
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
NSLog(@"Array: %@",reverseOrder);
请尝试以下代码:
NSArray *strDateArray = [[NSArray alloc] initWithObjects:@"03/09/2017",@"03/06/2016", @"01/06/2016",@"01/04/2016",@"03/01/2017", nil];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSMutableArray *dateArray = [[NSMutableArray alloc] init];
for (NSString *dateString in strDateArray) {
NSDate *date = [formatter dateFromString:dateString];
[dateArray addObject:date];
}
// sort array of dates
[dateArray sortUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) {
// return date1 compare date2 for ascending. And reverse the call for ascending.
return [date1 compare:date2];
}];
NSLog(@"dateArray %@", dateArray);
NSMutableArray *sortedDateArray = [[NSMutableArray alloc] init];
for (NSDate *date in dateArray) {
NSString *dateString = [formatter stringFromDate:date];
[sortedDateArray addObject:dateString];
}
NSLog(@"sortedDateArray %@", sortedDateArray);
对于Swift 4.0
let formater = DateFormatter()
formater.dateFormat = "MM/dd/yyyy" //date formate should be according to your date formate
let sortedArray=arrayToSort.sorted(){
(obj1, obj2) in
let date1=formater.date(from: obj1)
let date2=formater.date(from: obj2)
return date1!<date2!
}
//你可以根据你的代码更改日期格式
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSArray *sortedArray = [YourArraysortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2)
{
NSString *strDateObj1 = [NSString stringWithFormat:@"%@",[obj1 valueForKey:@"BirthDate"]];
NSString *strDateObj2 = [NSString stringWithFormat:@"%@",[obj2 valueForKey:@"BirthDate"]];
NSDate *d1 = [df dateFromString: strDateObj1];
NSDate *d2 = [df dateFromString: strDateObj2];
return [d1 compare: d2];
}];
NSLog(@"%@", sortedArray)