0

我无法让 NSDate 为我的一生工作,即使我已经扫描了 Stack Overflow 上的问题,因此将不胜感激。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 NSString *publishedText = [NSString stringWithFormat:@"%@", feedLocal.published];
cell.publishedLabel.text = publishedText;
    return cell;
}

给我字符串:

2013-05-08 18:09:37 +0000

我想变成:2013 年 5 月 8 日下午 6:45

我试过使用:

    NSString *publishedText = [NSString stringWithFormat:@"%@", feedLocal.published];
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [df dateFromString:publishedText];
    cell.publishedLabel.text = dateFromString;

但它不起作用并显示指针类型不兼容(NSStringto NSDate_strong)的警告。谢谢您的帮助!

4

2 回答 2

3

您正在将 a 分配NSDate给 a NSString cell.publishedLabel.text = dateFromString;(我想cell.publishedLabel.texta 是NSString.

编辑

我没有测试这段代码,但我认为输出应该没问题,如果不是,请查看 iOS日期格式指南

因此,在解析字符串并创建NSDate实例后,添加以下代码:

编辑 2——完整代码

NSString *publishedText = [NSString stringWithFormat:@"%@", feedLocal.published];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
NSDate *dateFromString = [df dateFromString:publishedText];

NSDateFormatter *secondDateFormatter= [[NSDateFormatter alloc] init];
[secondDateFormatter setDateStyle:NSDateFormatterLongStyle];
cell.publishedLabel.text = [secondDateFormatter stringFromDate:dateFromString];
于 2013-05-09T21:46:05.673 回答
2

从您发布的内容来看,它似乎feedLocal.published是一个NSDate.

由于您的目标是将此日期转换为字符串,因此您需要以下内容:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMMM d, yyyy h:mma"]; // this matches your desired format
NSString *dateString = [df stringFromDate:feedLocal.published];
cell.publishedLabel.text = dateString;

由于您的应用程序可以被世界各地的人们使用,我建议您像这样设置您的日期格式化程序:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateStyle:NSDateFormatterLongStyle];
[df setTimeStyle:NSDateFormatterShortStyle];

这样做而不是设置特定的日期格式。然后,日期和时间将适用于您应用的所有用户,而不仅仅是特定国家/地区的用户。

于 2013-05-09T22:27:01.993 回答