gpt4 book ai didi

ios - 已解析的 RSS 提要日期,在 NSDateFormatter 可以转换为仅小时格式之前不返回任何内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:18:09 25 4
gpt4 key购买 nike

我在 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的自定义单元格中,如下所示:

enter image description here

由于上面的行在 currentString 的日志中返回 NULL,我无法使用此问题 (iPhone: Convert date string to a relative time stamp) 中的函数将其转换为“小时前”格式:

有人能告诉我为什么日志中的 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];
}

这是上面代码后的日志:

enter image description here

由于某种原因,以下功能不起作用:

 -(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 转换为“小时/分钟/天/等格式”,请告诉我。谢谢

最佳答案

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
}

如果这样做,您的 pubTime 将毫无值(value)。您需要在 xmlParser 的 foundCharacters 委托(delegate)中初始化 currentString,然后在 didEndElement 方法中添加值。

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(!currentString){
currentString = [[NSMutableString alloc] init];
}
[currentString appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqual:@"pubDate"]){
NSLog(@"CURRENT STRING %@", currentString);
[self setPubTime:currentString];
currentString = nil;
}
}

并且您不需要进行所有这些计算来找到可以使用 NSDateComponents 的分钟、小时和天。请引用此贴Difference between two dates

关于ios - 已解析的 RSS 提要日期,在 NSDateFormatter 可以转换为仅小时格式之前不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com