4

イベントのtableViewに各日のセクションを設定するために、Webサービスから受け取ったNSDateを2つの異なる日付に分割しようとしています。後者を行う最も簡単な方法は、一意の日を探すフェッチ要求を作成することだと思いました。

そこで、NSDateの「日」を作成しようとしましたが、時間コンポーネントを00:00に設定しました。これを達成するためのより効率的な方法があるかどうか疑問に思います:

if (eventoItemList.count > 0) {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

        NSDateFormatter *dayFormatter = [[NSDateFormatter alloc] init];
        [dayFormatter setDateFormat:@"yyyy-MM-dd"];

        for (GDataXMLElement *eventoItem in eventoItemList) {
            BOEvent *event = [[BOEvent alloc] init];
            NSString *idEventStr = [[[eventoItem elementsForName:@"id"] objectAtIndex:0] stringValue];                       
            NSString *name = [[[eventoItem elementsForName:@"titulo"] objectAtIndex:0] stringValue];
            NSString *type = [[[eventoItem elementsForName:@"tipo"] objectAtIndex:0] stringValue];
            NSString *descr = [[[eventoItem elementsForName:@"descripcion"] objectAtIndex:0] stringValue];
            NSString *address = [[[eventoItem elementsForName:@"direccion"] objectAtIndex:0] stringValue];
            NSDate *date = [dateFormatter dateFromString:[[[eventoItem elementsForName:@"fecha"] objectAtIndex:0] stringValue]];
            NSString *action =  [[[eventoItem elementsForName:@"accion"] objectAtIndex:0] stringValue];

            [event setIdEvent:[idEventStr integerValue]];
            [event setName:name];
            [event setType:type];
            [event setDesc:descr];
            [event setAddress:address];
            [event setAction:action];
            [event setDate:date];
            [event setDayDate:[dayFormatter dateFromString:[dayFormatter stringFromDate:date]]];
            [events addObject:event];
        }
    }

ご協力ありがとうございました。

4

1 に答える 1

3

NSDateを2つのNSDateに分割するためのサンプルコード(日付のみ、時刻のみ)

     NSDate *date = [NSDate date];
    NSCalendar *gregorian = [NSCalendar currentCalendar];

    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents *comps = [gregorian components:unitFlags fromDate:date];    
    NSDate *dateOnly = [gregorian dateFromComponents:comps];

    unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit |  NSDayCalendarUnit;
    comps = [gregorian components:unitFlags fromDate:date];    
    NSDate *timeOnly = [gregorian dateFromComponents:comps];

    NSLog(@"%@ = \n\tDate: %@ \n\tTime: %@", date, dateOnly, timeOnly);

2つのNSStringでNSDateを出力するためのサンプルコード

    NSDate *date = [NSDate date];

    NSDateFormatter *f = [[NSDateFormatter alloc] init];
    [f setDateStyle:NSDateFormatterFullStyle];
    [f setTimeStyle:NSDateFormatterNoStyle];
    NSString *dateOnly = [f stringFromDate:date];

    [f setTimeStyle:NSDateFormatterFullStyle];
    [f setDateStyle:NSDateFormatterNoStyle];
    NSString *timeOnly = [f stringFromDate:date];

    NSLog(@"%@ = \n\tDate: %@ \n\tTime: %@", date, dateOnly, timeOnly);
于 2012-12-01T15:08:42.160 に答える