2009-12-02 5 views
0

Я играю с примером исходного кода coredatabooks с сайта Apple, или here. Я пытаюсь установить значение атрибута даты авторских дат, чтобы заменить автора как заголовок раздела таблицы, и мне нужно, чтобы значение даты было static, что означает, что мне не нужно время, иначе все значения даты будут разными , и нет двух книг с одним и тем же месяцем даты и года, в соответствии с той же датой, что и временная часть значения даты ...NSDateFormatter: Я не хочу времени!

Вот код моего файла RootViewController.m, который форматирует DatePicker значение даты для отображения в заголовке секции:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
NSString *rawDateStr = [[[fetchedResultsController sections] objectAtIndex:section] name]; 

//convert default date string to NSDate... 
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZ"]; 
NSDate *date = [formatter dateFromString:rawDateStr]; 

//convert NSDate to format we want... 
[formatter setDateFormat:@"EEEE MMMM d"]; 
NSString *formattedDateStr = [formatter stringFromDate:date]; 

return formattedDateStr; 

}

Это выводится просто отлично, но это не позволяет мне группировать книги с тем же днем ​​и годом месяца авторского права в том же разделе, потому что снова (я полагаю) значение даты также имеет время. Фактическая экономия от значения даты из DatePicker делается в файле EditingViewController.m следующим образом:

- (IBAction)save { 

// Pass current value to the edited object, then pop. 
if (editingDate) { 
    [editedObject setValue:datePicker.date forKey:editedFieldKey]; 
} 

метод сохранения в настоящее время принимает дату как есть из DatePicker, так как я могу изменить этот код сначала скопируйте дату datepicker в локальную переменную и затушите время там, а затем используйте это значение в инструкции setValue, чтобы оно правильно группировалось? ПОЖАЛУЙСТА ПОМОГИ! Благодаря

+0

Похоже, что этот вопрос должен быть закрыт либо как дубликат, либо как уже не имеющий отношения к делу. –

ответ

2

С Дейта по своей сути включает в себя время, вы будете иметь, чтобы изменить саму NSDate объект, превращая его в его NSDateComponent с, гашение на HH:mm:ss, а затем преобразовать эти компоненты даты обратно в NSDate.

Например:

NSDate * aDate = [NSDate date]; 
NSDateComponents * components = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:aDate]; 
NSDate * convertedDate = [[NSCalendar currentCalendar] dateFromComponents:components]; 

Если вы сделаете это, вы будете терять вещи, как смещение часового пояса, так что вы можете рассмотреть побочные эффекты этого.

Приятная вещь в этом методе заключается в том, что он работает независимо от того, как строка отформатирована (что является хрупкой вещью, на которую можно положиться).