我有以下代码,正在为UITableView的cellForRowAtIndexPath调用。
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”。
我将一个nil NSDate值返回到visitDate。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
更新:正如@rmaddy指出的那样,对于visit.olcreatedat
是什么存在误解。
第一个答案基于visit.olcreatedat
是一个假设
NSDate的。对于假设visit.olcreatedat
是包含格式化日期的NSString的答案,请阅读此答案的第二部分。
- (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
转换为格式 EEEE,dd MMM yyyy HH:mm:ss z ?如果是这样,让我们完成每一步。
首先,您需要将visit.olcreatedat
字符串(存储在strVisitDate
中)转换为实际的NSDate对象visitDate
。因此,要使此步骤有效,您需要一个接受visit.olcreatedat
格式的NSDateFormatter: yyyy-MM-dd HH:mm:ss z 。
然后,您希望将获得的visitDate
NSDate转换为您喜欢的格式,因此您需要另一个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;
}
答案 1 :(得分: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];
希望它对你有所帮助。