0

我有以下代码在 cellForRowAtIndexPath 中为 UITableView 调用。

self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateFormat:@"EEEE, dd MMM yyyy HH:mm:ss z"];

OLVisit *visit = [self.visits objectAtIndex:indexPath.row];
NSString *strVisitDate = [NSString stringWithFormat:@"%@", visit.olcreatedat];
NSDate *visitDate = [self.dateFormatter dateFromString:strVisitDate];
strVisitDate = [self.dateFormatter stringFromDate:visitDate];

从 visit.olcreatedat 返回的字符串格式如下(如下面的调试器截图所示)“2013-04-09 11:55:25 +0000”。

在此处输入图像描述

我得到一个返回到 visitDate 的 nil NSDate 值。

有人可以帮我解决这个问题吗?

4

2 回答 2

2

更新:正如@rmaddy 所指出的,对什么visit.olcreatedat是误解。visit.olcreatedat第一个答案是基于NSDate的假设。对于假设visit.olcreatedat是包含格式化日期的 NSString 的答案,请阅读此答案的第二部分。

visit.olcreatedat 是一个 NSDate

- (void)viewDidLoad {
    [super viewDidLoad];

    // Alloc the date formatter in a method that gets run only when the controller appears, and not during scroll operations or UI updates.
    self.outputDateFormatter = [[NSDateFormatter alloc] init];
    [self.outputDateFormatter setDateFormat:@"EEEE, dd MMM yyyy HH:mm:ss z"];
}


- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath: {
   // dequeue or create the cell... 
   // ...
   // ...

   OLVisit *visit = [self.visits objectAtIndex:indexPath.row];
   NSString * strVisitDate = [self.outputDateFormatter stringFromDate:visit.olcreatedat];

   // Here you can assign the string to the right UILabel
   cell.textLabel.text = strVisitDate;

   return cell;
}

visit.olcreatedat 是一个 NSString

是否要将其转换visit.olcreatedat为格式EEEE, dd MMM yyyy HH:mm:ss z?如果是这样,让我们​​完成每个步骤。

首先,您需要将 visit.olcreatedat字符串(存储在 中strVisitDate)转换为实际的 NSDate 对象,visitDate. 因此,要使这一步起作用,您需要一个接受以下visit.olcreatedat格式的 NSDateFormatter:yyyy-MM-dd HH:mm:ss z

然后,您要将获得的visitDateNSDate 转换为您喜欢的格式,因此您需要另一个 NSDateFormatter,格式为EEEE, dd MMM yyyy HH:mm:ss z

- (void)viewDidLoad {
    [super viewDidLoad];

    // Alloc the date formatter in a method that gets run only when the controller appears, and not during scroll operations or UI updates.
    self.inputDateFormatter = [[NSDateFormatter alloc] init];
    [self.inputDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
    self.outputDateFormatter = [[NSDateFormatter alloc] init];
    [self.outputDateFormatter setDateFormat:@"EEEE, dd MMM yyyy HH:mm:ss z"];
}

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath: {
   // dequeue or create the cell... 
   // ...
   // ...

   OLVisit *visit = [self.visits objectAtIndex:indexPath.row];
   NSString *strVisitDate = visit.olcreatedat;
   NSDate *visitDate = [self.inputDateFormatter dateFromString:strVisitDate];
   strVisitDate = [self.outputDateFormatter stringFromDate:visitDate];

   // Here you can assign the string to the right UILabel
   cell.textLabel.text = strVisitDate;

   return cell;
}
于 2013-05-01T20:36:56.660 回答
1

更改日期格式并替换代码:

老的 :

[self.dateFormatter setDateFormat:@"EEEE, dd MMM yyyy HH:mm:ss z"];

新的 :

[self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];

这是因为您使用了不同的日期格式,而 strVisitDate 日期格式为“yyyy-MM-dd HH:mm:ss z”。所以你需要设置相同的格式。

编辑 :

用这个替换你的代码。

self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];

OLVisit *visit = [self.visits objectAtIndex:indexPath.row];
NSString *strVisitDate = [NSString stringWithFormat:@"%@", visit.olcreatedat];

NSDate *visitDate = [dateFormatter dateFromString:strVisitDate];
strVisitDate = [dateFormatter stringFromDate:visitDate];

//Here you can set any date Format as per your need

[dateFormatter setDateFormat:@"EEEE, dd MMM yyyy HH:mm:ss z"];
strVisitDate = [dateFormatter stringFromDate:visitDate];

希望它可以帮助你。

于 2013-05-01T20:31:26.843 回答