如何按日期获得asccending order项目?

时间:2015-06-10 10:03:25

标签: ios objective-c date

我有一个包含很多项目的字典。我希望按日期订购升序商品。我的日期格式是:2015年6月10日09:27:11

我尝试了这段代码,但没有工作:aux是我的数组,包含日期组件。

for (int i=0; i<aux.count-1; i++) {
            for (int j=i+1; j<aux.count; j++) {
                NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
                [dateFormat setDateFormat:@"dd-MM-yyyy hh:mm:ss"];
                NSDate *date1 = [dateFormat dateFromString:[aux objectAtIndex:i]];
                NSDate *date2 = [dateFormat dateFromString:[aux objectAtIndex:j]];

                NSComparisonResult comparisonResult = [date1 compare:date2];
                if (comparisonResult==-1) {
                    NSString *var= [aux objectAtIndex:i];
                    [aux replaceObjectAtIndex:i withObject:[aux objectAtIndex:j]];
                    [aux replaceObjectAtIndex:j withObject:var];

                }
            }
        }

我想比较两个日期(date1,date2)。如果date2比date1更大,我想要交换。我需要手动交换所以:如果date2更大,我想从方法中选择true1

3 个答案:

答案 0 :(得分:5)

NSMutableArray使用其中一种排序方法处理排序(例如sortUsingComparator:):

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];

[aux sortUsingComparator:^NSComparisonResult(NSString *datestring1, NSString *datestring2) {
    NSDate *date1 = [dateFormatter dateFromString:datestring1];
    NSDate *date2 = [dateFormatter dateFromString:datestring2];
    return [date1 compare:date2];
}];

SIDENOTE :您还应该考虑将日期字符串转换为NSDate s 一次并将其作为NSDate存储在数组中。

答案 1 :(得分:0)

假设您有一个NSMutableArray对象,其字段为“startDate”,类型为NSDate,则使用下面的代码:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:YES];
[myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

答案 2 :(得分:0)

尝试比较和填充如下所示

    NSComparisonResult result;
    result = [Str_StoreOpening compare:Str_StoreClosing]; // comparing two dates

    NSString *Str_CloseTime;
    if(result==NSOrderedAscending){
        //populate in Ordered Ascending in here

    }else if(result==NSOrderedDescending){
        //populate in Ordered Descending in here


    }else{
        //NSLog(@"Both dates are same");

    }