繁体   English   中英

如何在ios中按升序排序日期数组

[英]how to sort array of dates in ascending order in ios

我有一个NSMutableArray,其中包含字符串格式的日期。 在这里,我需要按日期的升序排序该数组。 我用了强文

 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包含like,

 01/04/2018, 01/06/2016, 03/01/2017, 03/06/2016, 03/09/2016

您需要像这样使用sortedArrayUsingComparator来使用String数组对日期进行排序。

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 ,如果您的日期包含formate 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM