如何格式化NSFetchedResultsSectionInfo中的日期?

时间:2012-03-12 22:15:40

标签: iphone ios

我希望能够干净地在表格的标题中格式化我的日期。这是我的代码:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSDate *date = [dateFormatter dateFromString:sectionInfo.name];
NSString *formattedDate = [dateFormatter stringFromDate:date];
NSLog(@"%@", formattedDate);
return formattedDate;
}

使用此代码,由于date为null,因此不会出现任何节标题。由于某种原因,dateFromString无法将字符串sectionInfo.name转换为NSDate。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

考虑到您的评论,如果您指出日期标题的格式为2012-03-12 07:00:00 +0000,则可以确定问题是格式化。

NSDateFormatterMediumStyle的格式为“1937年11月23日” - 这是你的不匹配:)

你必须使用类似的东西:

[dateFormatter setDateStyle:@"yyyy-dd-MM HH:mm:ss ZZZ"];

从您拥有的格式的字符串中创建NSDate。应该工作。

如果你需要使用NSDateFormatterMediumStyle格式返回一个NSString,那么只有在获得NSDate之后,才能像以前一样将它应用到dateFormatter对象:

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

然后使用此dateFormatter从您获得的日期获取字符串:

NSString *formattedDate = [dateFormatter stringFromDate:date];

答案 1 :(得分:0)

在视图中加载我设置了我的日期解析器和日期格式化程序

@property(nonatomic, strong) NSDateFormatter *dateParser;
@property(nonatomic, strong) NSDateFormatter *dateFormatter;
@property(nonatomic, strong) NSDateFormatter *timeFormatter;


- (void)viewDidLoad {
    [super viewDidLoad];

    self.dateParser = [[NSDateFormatter alloc] init];
    self.dateFormatter = [[NSDateFormatter alloc] init];

    [self.dateParser setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    [self.dateFormatter setDateStyle:NSDateFormatterFullStyle];
    ...    
}


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    NSDate *date = [self.dateParser dateFromString:sectionInfo.name];
    return [self.dateFormatter stringFromDate:date];
}