我在 StackOverflow 上看到了很多看起来相似的问题,但没有一个对我有帮助。
我正在解析一个 RSS 提要,并希望将日期转换为“几小时前”格式,而不是默认格式。
else if ([elementName isEqual:@"pubDate"])
{
currentString = [[NSMutableString alloc] init];
NSLog(@"CURRENT STRING %@", currentString); // THIS IS RETURNING NULL IN LOGS
[self setPubTime:currentString]; // But this statement is correctly putting the following in the label in custom tableview cell
}
上面代码的最后一行是将标签放在 tableview 的自定义单元格中,如下所示:
由于上面的行在 currentString 的日志中返回 NULL,我无法使用此问题中的函数(iPhone:将日期字符串转换为相对时间戳)将其转换为“小时前”格式:
有人可以指出为什么日志中的 currentString 为空,但仍然能够在下一条语句中设置标签,以及如何将其转换为几小时前的格式。
谢谢
更新:
Anupdas 的回答解决了一半的问题。现在我可以看到 currentString 在 NSLog 和自定义 tableview 单元格内的 pubTime 标签中显示时间戳。唯一剩下的就是使用这个时间戳并将它们转换为“小时/分钟/月等前”格式。
使用以下内容:
if ([elementName isEqualToString:@"pubDate"]) {
NSLog(@"pubTime CURRENT IS %@", currentString);
// [self setPubTime:currentString];
NSString *myString = [self dateDiff:currentString];
[self setPubTime:myString];
}
这是上面代码之后的日志:
由于某种原因,以下功能不起作用:
-(NSString *)dateDiff:(NSString *)origDate {
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setFormatterBehavior:NSDateFormatterBehavior10_4];
[df setDateFormat:@"EEE, dd MMM yy HH:mm:ss VVVV"];
NSDate *convertedDate = [df dateFromString:origDate];
[df release];
NSDate *todayDate = [NSDate date];
double ti = [convertedDate timeIntervalSinceDate:todayDate];
ti = ti * -1;
if(ti < 1) {
return @"never";
} else if (ti < 60) {
return @"less than a minute ago";
} else if (ti < 3600) {
int diff = round(ti / 60);
return [NSString stringWithFormat:@"%d minutes ago", diff];
} else if (ti < 86400) {
int diff = round(ti / 60 / 60);
return[NSString stringWithFormat:@"%d hours ago", diff];
} else if (ti < 2629743) {
int diff = round(ti / 60 / 60 / 24);
return[NSString stringWithFormat:@"%d days ago", diff];
} else {
return @"never";
}
}
如果有人能指出一个更好的解决方案将我的 currentString 转换为“小时/分钟/天/等格式”,请告诉我。谢谢