0

我正在玩苹果网站或这里的 coredatabooks 源代码示例。我正在尝试设置书籍版权日期属性值以替换作者作为 tableview 部分标题,并且我需要日期值是static,这意味着我不需要时间,否则所有日期值都是不同的,并且没有两本书在同一日期下具有相同的月日和年份版权日期阵容,因为日期值的时间部分正在改变......

这是我的 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;

}

这输出很好,但它不允许我在同一部分中将具有相同版权月份和年份的书籍分组,因为(我假设)日期值也有时间。日期选择器中日期值的实际保存是在 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 语句中使用该值以便它分组正确吗?请帮忙!谢谢

4

1 回答 1

2

由于日期本身包含时间,因此您将不得不修改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];

如果你这样做,你会失去像时区偏移这样的东西,所以你可能需要考虑它的副作用。

这种方法的好处是,无论字符串的格式如何(这是一个脆弱的依赖),它都可以工作。

于 2009-12-02T18:37:44.207 回答