【问题标题】:Sorting array based on date and time with two dictionary keys使用两个字典键根据日期和时间对数组进行排序
【发布时间】:2013-08-12 20:07:57
【问题描述】:

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

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

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

我知道我需要以某种方式将两个字符串组合到 '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;
}

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

【问题讨论】:

    标签: ios objective-c sorting nsdate


    【解决方案1】:

    您还需要对时间进行排序,这就是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;
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 2011-12-11
        • 1970-01-01
        相关资源
        最近更新 更多