NSDateFormatter: я не хочу времени! - PullRequest
0 голосов
/ 02 декабря 2009

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

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

- (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;

}

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

 - (IBAction)save {

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

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

1 Ответ

2 голосов
/ 02 декабря 2009

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

Например:

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

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

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

...