Xcode iPhone日期格式化问题

Xcode iPhone日期格式化问题,iphone,cocoa-touch,Iphone,Cocoa Touch,我一辈子都搞不懂为什么我的代码不能格式化日期,因为它以前对我有用,所以我想我会把代码发布出来,看看是否有人能发现这个问题 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *MyIdentifier = @"MyIdentifier"; UITableViewCell *cell = [tableVie

我一辈子都搞不懂为什么我的代码不能格式化日期,因为它以前对我有用,所以我想我会把代码发布出来,看看是否有人能发现这个问题

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *MyIdentifier = @"MyIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier] autorelease];
}

// Set up the cell
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];

cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];


NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];

NSDate *dateTmp;
dateTmp = [[stories objectAtIndex:storyIndex]objectForKey: @"date"];

cell.detailTextLabel.text = [dateFormat stringFromDate:dateTmp];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
cell.textLabel.font=[UIFont fontWithName:@"Verdana" size:12.0];
cell.detailTextLabel.textColor = Light_BACKGROUND;

[dateFormat release];

return cell;
}

我使用了nslogs来查看代码实际生成了什么信息,从可变数组中获取日期似乎没有问题,但当我尝试将stringFromDate应用于细节文本时,它只返回null,因此没有任何内容被放置,细节文本为空

我试图设置一个字符串,以便检查日志,结果就是这样

[1984:207] all done!
[1984:207] stories array has 10 items
[1984:207] DateTmp = Wed, 16 Feb 2011 01:37:16 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Tue, 15 Feb 2011 23:05:31 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Tue, 15 Feb 2011 04:31:36 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Tue, 15 Feb 2011 02:16:01 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Sun, 13 Feb 2011 04:07:42 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Sun, 13 Feb 2011 02:15:41 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Sun, 13 Feb 2011 00:21:42 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Sat, 12 Feb 2011 22:50:27 +0000
[1984:207] DateLine = (null)
[1984:207] DateTmp = Sat, 12 Feb 2011 21:07:27 +0000
[1984:207] DateLine = (null)

感谢您的帮助。

看来您创建的日期是正确的,但没有保留您创建的日期。这可能就是为什么您可以在创建期间记录日期值。创建单元格后,所生成的字符串超出范围,因此得到(null)。尝试将单元格文本标签设置为:

 [[cell detailTextLabel] setText:[dateFormat stringFromDate:dateTmp]];

您的
NSDateFormatter
dateFormat
与您在日志中显示的tmpDate不匹配

试试这个:

[dateFormat setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss ZZZ"]
请注意,您的日期格式字符串没有考虑周中缩短的日期,并且在没有日期的日期中添加了破折号


这是一个页面,显示了
NSDateFormatter
(OS X 10.5+和iOS)使用的所有格式字符

找到了一个可以解决的方法,我无法找到无法格式化信息的原因我唯一的猜测是,在解析推特提要中的信息时,日期是如何存储的。感谢所有帮助我解决这个问题的人,你的所有解决方案都很好,这似乎是一个奇怪的情况。

你能提供你的NSLog声明吗?日期TMP和日期行信息就是我从NSLog得到的。Dateline是一个nsstring,我为它做了一个日志,以查看是否将日期分配给该字符串。例如,当运行代码时,我会看到数组中包含的日期被分配给DateTmp。下一步应该是将日期格式应用于DateTmp,并返回字符串以显示在详细文本标签中。继续尝试,结果与之前相同,它仍然返回null,但由于它在详细信息行中是null值,所以它只显示标题而不显示详细文本。我使用的代码看起来和你举的例子非常相似。我能找到的唯一区别是,我首先分配了
[dateFormat-stringFromDate:dateTmp]到NSString。i、 e.
NSString*tempString=[dateFormat stringFromDate:dateTmp]
[[cell detailTextLabel]setText:tempString]可能值得一试?是的,我也这么想,也试过了,但这与日期的格式不一致有关,很可能与格式的设置有关。您是否在故事词典中使用NSDate对象?也许可以尝试使用NSDateFormatter的默认格式,看看是否可以在不设置自定义格式的情况下查看日期?对不起,我帮不上忙了!不用担心,朋友谢谢你的帮助我会调查你的建议并让你知道!我使用新的日期格式更新了代码,但使用[dateFormat stringFromDate:dateTmp]时仍然得到一个空值;我明白你所说的日期格式中的破折号是什么意思了,我甚至没有想到这些。我有一种感觉,它可能是一个月的日期,让人大吃一惊。你能检查一下像5月5日这样的日期是显示“05”还是“5”作为日期吗。如果不是零填充,则格式字符串中只需要一个“d”。我检查了更改setDateformat的格式是否会产生差异,我发现它仍然返回空值,而不是执行日期格式。。我不确定这是否有帮助,但目标是一个包含日期的rss阅读器详细信息行。目前,它从twitter提要中提取pubdate,这就是我拥有的第一个日期,我只需要将其格式化为结尾处没有+0000。