1

我正在尝试根据日期和时间对数组进行排序,我可以成功地根据日期对数组进行排序,时间都作为字典中的另一个值出现。

所以日期以格式字符串的形式"yyyy-MM-dd"出现,时间以格式字符串的形式出现"HH:mm"

时间值"starts"以字符串 '"HH:mm"' 格式输入。

我知道我需要以某种方式将两个字符串组合在一起,'yyyy-MM-dd HH:mm'但是如何?

-(NSMutableArray *)sortArrayBasedOndate:(NSMutableArray *)arraytoSort
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];

    NSComparator compareDates = ^(id string1, id string2)
    {
        NSDate *date1 = [formatter dateFromString:string1];
        NSDate *date2 = [formatter dateFromString:string2];

        return [date1 compare:date2];
    };


    NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES comparator:compareDates];
    [arraytoSort sortUsingDescriptors:[NSArray arrayWithObjects:sortDesc1, nil]];


    return arraytoSort;
}

知道如何解决这个问题吗?

4

2 回答 2

9

您还需要对时间进行排序,这就是为什么sortUsingDescriptors:需要一个数组。

-(NSMutableArray *)sortArrayBasedOndate:(NSMutableArray *)arraytoSort
{
    NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init];
    [fmtDate setDateFormat:@"yyyy-MM-dd"];

    NSDateFormatter *fmtTime = [[NSDateFormatter alloc] init];
    [fmtTime setDateFormat:@"HH:mm"];

    NSComparator compareDates = ^(id string1, id string2)
    {
        NSDate *date1 = [fmtDate dateFromString:string1];
        NSDate *date2 = [fmtDate dateFromString:string2];

        return [date1 compare:date2];
    };

    NSComparator compareTimes = ^(id string1, id string2)
    {
        NSDate *time1 = [fmtTime dateFromString:string1];
        NSDate *time2 = [fmtTime dateFromString:string2];

        return [time1 compare:time2];
    };

    NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES comparator:compareDates];
    NSSortDescriptor * sortDesc2 = [NSSortDescriptor sortDescriptorWithKey:@"starts" ascending:YES comparator:compareTimes];
    [arraytoSort sortUsingDescriptors:@[sortDesc1, sortDesc2]];

    return arraytoSort;
}
于 2013-08-12T20:17:19.600 回答
0

将两者连接到一个时间戳。然后获取自参考日期以来的 TimeInterVal,并按此数字排序

于 2013-08-12T20:14:48.400 回答