开发者社区> 问答> 正文

如何对数组中的日期进行分组?

我的对象是这样的“ 2019-12-03T05:58:11.317Z”。我想将相同的日期元素进行分组。我可以基于日期创建UITableView节。这是数组,我有三个不同的日期,所以我想创建3个部分。问题是newArrayList没有保存所有元素。

        NSMutableArray *newArrayList;
        //This is my date array
        arrayList = [[NSMutableArray alloc] initWithObjects:@“2019-12-03T05:58:11.317Z”, @“2019-12-03T05:58:10.317Z”, @“2019-12-03T05:58:01.317Z”, @“2019-12-03T05:55:12.448Z”, @“2019-12-03T05:48:11.317Z”, @“2019-12-03T05:28:11.317Z”, @“2019-12-03T05:11:24.004Z”, @“2019-12-03T05:28:11.317Z”, @“2019-12-03T05:55:12.965Z”, @“2019-12-02T15:09:35.408Z”, @“2019-12-02T15:09:38.187Z”, @“2019-12-02T15:43:02.118Z”, @“2019-12-02T15:44:09.344Z”, @“2019-12-02T17:07:55.038Z”, @“2019-12-02T16:42:16.649Z”, @“2019-12-01T16:42:16.649Z”, nil];

        newArrayList = [[NSMutableArray alloc]init];//Here I want to same date elements 

            NSDate *fromDate;
            NSMutableArray *tempArray = [[NSMutableArray alloc] init];
            for (int i=0; i<arrayList.count; i++) {
                NSDate *dt1 = fromDate;
                NSDate *dt2 = [self getLocalDateTimeFromUTC2:[arrayList objectAtIndex:i]];
                if (i != 0) {
                    if ([self isSameDay:dt1 otherDay:dt2] == YES) {
                        [tempArray addObject:t];
                    } else {
                        [newArrayList addObject:tempArray];
                    //  [tempArray removeAllObjects];
                    }
                }
                fromDate = dt2;
            }

//To get required date formate
-(NSDate *)getLocalDateTimeFromUTC2:(NSString *)strDate
{

// create dateFormatter with UTC time format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"]; //@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
//    NSLog(@"%@", t.dateAndTime); //2019-12-02T15:09:38.187Z
NSDate *date = [dateFormatter dateFromString:strDate]; // create date from string

// change to a readable time format and change to local time zone
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *timestamp = [dateFormatter stringFromDate:date];

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yyyy"];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date2 = [dateFormat dateFromString:timestamp];
//    NSLog(@"%@", date2);

return date2;
}

//To compare two dates
- (BOOL)isSameDay:(NSDate*)date1 otherDay:(NSDate*)date2 {

NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];
return [comp1 day]   == [comp2 day] && [comp1 month] == [comp2 month] && [comp1 year]  == [comp2 year];
}

展开
收起
南南唐语 2019-12-03 20:56:49 981 0
1 条回答
写回答
取消 提交回答
  • 1:假设您有以下数据

    
    

    2:使日期组```let dictGroupDate = Dictionary(grouping: arrDates) { (strdate) -> String in let df = DateFormatter() df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ" let date = df.date(from: strdate) df.dateFormat = "yyyy-MM-dd" return df.string(from: date!) }

    3:获取所有节日期并对它们进行排序```let arrDateKey = Array(dictGroupDate.keys).sorted { (strdate1, strdate2) -> Bool in
    let df = DateFormatter()
    df.dateFormat = "yyyy-MM-dd"
    let date1 = df.date(from: strdate1)
    let date2 = df.date(from: strdate2)
    
    return date1!.compare(date2!)  == .orderedAscending
    }
    

    4:为每个日期排序时间并创建新字典``` var newGroupedDates = String : [String]

    for strKey in arrDateKey { let sortedTime = dictGroupDate[strKey]?.sorted(by: { (strdate1, strdate2) -> Bool in let df = DateFormatter() df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ" let date1 = df.date(from: strdate1) let date2 = df.date(from: strdate2)

    return date1!.compare(date2!)  == .orderedAscending
    

    })

    newGroupedDates[strKey] = sortedTime! }

    5:显示数据 UITABLEVIEW```// NumberOfSections
    arrDateKey.count
    
    //NumberOfRows
    let key = arrDateKey[indexPath.section]
    newGroupedDates[key]?.count
    
    // CellForRow
    // To get correct date and Time
    
    let key = arrDateKey[indexPath.section]
    let item = newGroupedDates[key]![indexPath.row]
     // Now item is the date string, and do whatever you wanted to do.
    

    我正在迅速进行中,希望您能在obj-c中进行管理

    假设您有以下数据

    let arrDates = [ "2019-12-03T05:58:11.317Z ", "2019-12-03T05:58:10.317Z ", "2019-12-03T05:58:01.317Z ", "2019-12-03T05:55:12.448Z ", "2019-12-03T05:48:11.317Z ", "2019-12-03T05:28:11.317Z ", "2019-12-03T05:11:24.004Z ", "2019-12-03T05:28:11.317Z ", "2019-12-03T05:55:12.965Z ", "2019-12-02T15:09:35.408Z ", "2019-12-02T15:09:38.187Z ", "2019-12-02T15:43:02.118Z ", "2019-12-02T15:44:09.344Z ", "2019-12-02T17:07:55.038Z ", "2019-12-02T16:42:16.649Z ", "2019-12-01T16:42:16.649Z "] 使日期组

    let dictGroupDate = Dictionary(grouping: arrDates) { (strdate) -> String in let df = DateFormatter() df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ" let date = df.date(from: strdate) df.dateFormat = "yyyy-MM-dd" return df.string(from: date!) } 获取所有节日期并对它们进行排序

    let arrDateKey = Array(dictGroupDate.keys).sorted { (strdate1, strdate2) -> Bool in let df = DateFormatter() df.dateFormat = "yyyy-MM-dd" let date1 = df.date(from: strdate1) let date2 = df.date(from: strdate2)

    return date1!.compare(date2!) == .orderedAscending } 为每个日期排序时间并创建新字典

    var newGroupedDates = String : [String]

    for strKey in arrDateKey { let sortedTime = dictGroupDate[strKey]?.sorted(by: { (strdate1, strdate2) -> Bool in let df = DateFormatter() df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ" let date1 = df.date(from: strdate1) let date2 = df.date(from: strdate2)

    return date1!.compare(date2!)  == .orderedAscending
    

    })

    newGroupedDates[strKey] = sortedTime! } 显示数据 UITABLEVIEW

    // NumberOfSections arrDateKey.count

    //NumberOfRows let key = arrDateKey[indexPath.section] newGroupedDates[key]?.count

    // CellForRow // To get correct date and Time

    let key = arrDateKey[indexPath.section] let item = newGroupedDates[key]![indexPath.row] // Now item is the date string, and do whatever you wanted to do. 输出量

    最后的newGroupedDate```["2019-12-03": ["2019-12-03T05:11:24.004Z ", "2019-12-03T05:28:11.317Z ", "2019-12-03T05:28:11.317Z ", "2019-12-03T05:48:11.317Z ", "2019-12-03T05:55:12.448Z ", "2019-12-03T05:55:12.965Z ", "2019-12-03T05:58:01.317Z ", "2019-12-03T05:58:10.317Z ", "2019-12-03T05:58:11.317Z "], "2019-12-02": ["2019-12-02T15:09:35.408Z ", "2019-12-02T15:09:38.187Z ", "2019-12-02T15:43:02.118Z ", "2019-12-02T15:44:09.344Z ", "2019-12-02T16:42:16.649Z ", "2019-12-02T17:07:55.038Z "], "2019-12-01": ["2019-12-01T16:42:16.649Z "]]

    2019-12-03 20:59:33
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载