NSDateFormatter:我不想要时间!

时间:2009-12-02 18:16:23

标签: iphone header date nsdateformatter

我正在玩苹果网站上的coredatabooks源代码示例,或here。我试图设置书籍版权日期属性值来替换作者作为tableview部分标题,我需要日期值为静态,这意味着我不需要时间,否则全部由于日期值的时间部分正在发生变化,因此日期值不同,并且没有两个图书对象在同一日期具有相同的月份日和年份版权日期阵容......

以下是我的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];
}

save方法当前从datepicker获取日期,所以我如何修改该代码以首先将datepicker的日期复制到局部变量并清空其中的时间,然后在setValue语句中使用该值所以它正确分组?请帮忙!感谢

1 个答案:

答案 0 :(得分:2)

由于日期固有地包含时间,因此您必须通过将NSDate对象转换为NSDateComponent s,删除HH:mm:ss,然后转换为NSDate * aDate = [NSDate date]; NSDateComponents * components = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:aDate]; NSDate * convertedDate = [[NSCalendar currentCalendar] dateFromComponents:components]; 来修改{{1}}对象本身。日期组件回到NSDate。

例如:

{{1}}

如果这样做,你会丢失时区偏移等内容,所以你可能想要考虑它的副作用。

这个方法很好用的是它无论字符串的格式如何都可以工作(这是一个很容易依赖的东西)。

相关问题