如何正确显示从Core Data获取的日期时间

时间:2013-05-10 06:01:11

标签: ios objective-c core-data nsdate nsdateformatter

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> theSection = [[self.fetchedResultsController sections] objectAtIndex:section];

    //return [[[theSection name]componentsSeparatedByString:@"+"]objectAtIndex:0];

    return [NSDateFormatter localizedStringFromDate:[NSDate dateWithTimeIntervalSince1970:[theSection name]] dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterNoStyle];
}

我想使用NSDateFormatter显示从核心数据中提取的日期时间并根据需要显示。

更新1

NSDateFormatter *f = [[NSDateFormatter alloc]init];
[f setDateFormat:@"dd:mm:yy hh:mm"];
NSDate *d = [f dateFromString:[theSection name]];

return [f stringFromDate:d];

这也行不通:(

更新2

NSLog(@"TEST=>%@",[theSection name]);

显示2013-05-09 11:58:28 +0000但在数据库中存储如下

389773826.504289

2 个答案:

答案 0 :(得分:3)

这应该有效:

NSDateFormatter *f = [[NSDateFormatter alloc]init];
[f setDateFormat:@"MM:dd:yy hh:mm"];

// The current section:
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.controller sections] objectAtIndex:section];
// One arbitrary object in this section:
NSManagedObject *obj = [[sectionInfo objects] objectAtIndex:0];
// The date value of this object (and all objects of this section):
NSDate *date = [obj valueForKey:@"date"]; // <-- use your "sectionNameKeyPath" here

return [f stringFromDate:date];

原因:您使用日期属性来分区表视图。 [sectionInfo name] 将日期转换为字符串,这使得转换很困难 日期为不同的格式。这种方法直接访问日期值, 并将其转换为所需的格式。

答案 1 :(得分:0)

  1. 不关心格式,日期存储在DB中。这是私人的。

  2. 假设[section name]返回一个字符串,你需要一个日期格式化程序,它理解那个格式。 (看起来像UTC。)然后你需要一个日期格式化程序,它被设置为输出格式。将字符串放在第一个格式化程序中,取出日期,然后将日期放在第二个格式化程序中。