- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 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: 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];
}
这是上面代码后的日志:
由于某种原因,以下功能不起作用:
-(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/
我在 iOS 6 上使用 xcode 4.5(4G182)。NSDateFormatter 在 iOS 6 中显示错误的年份,如何解决? NSDateFormatter *dateFormatter
我在 iOS 6 上使用 xcode 4.5(4G182)。NSDateFormatter 在 iOS 6 中显示错误的年份,如何解决? NSDateFormatter *dateFormatter
我正在尝试创建一个 TableViewCell,就像 iPhone 上的 Notes 应用程序中的那样。标题在左侧,时间在右侧,紧挨着披露者指示符。 看起来像那样的 tableView。我知道我必须使
我有一个用于“从”和“到”字段的日期选择器,我想要减法的结果。例如:toValue-fromValue,结果以小时为单位。如何做到这一点? 最佳答案 可以使用timeIntervalSinceDate
我简单地尝试重新格式化日期: NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSDate *date = [[NSDat
在 Instrument 的帮助下,我发现以下代码段存在内存泄漏。仪器显示 NSDateFormatter 此处泄漏内存。 - (NSDate*) dateSelected{ if(selectedD
当用户未使用公历作为 iPhone 的默认日历时,我在使用 NSDateFormatter 时遇到问题。 NSString *testString = @"2011-01-14"; NSDateFor
以下日期/时间的 NSDateFormatter 字符串是什么:02/22/2011 10:43:00 AM 基本上我想要的是读取字符串02/22/2011 19:00:23 PM,将其转换为NSDa
我正在尝试创建一个格式化程序,将显示的日期格式转换为 NSDate 对象: NSString *dateStr = @"2010-06-21T19:00:00-05:00"; NSDateFormat
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
我正在从表示日期的文本中提取字符串。它们看起来像这样: Monday August 16, 2010 05:28 AM EST 我正在尝试使用 NSDateFormatter 来解析它们。我已将其格式
我有一个应用于 NSTextFieldCell 的 10.4 样式日期格式化程序。我调用 setTwoDigitStartDate: (尝试使用纪元日期和“引用”日期),但是当我输入带有两位数年份的日
在打开 doesRelativeDateFormatting 的情况下使用 NSDateFormatter 时,所有相对格式似乎都相对于当前系统时间。我想使用相对格式设置日期,例如“今天”或“明天”,
我想从日期获取 NSString,日期格式如下: MMEEEY ww 问题出在“ww”,即一年中的第几周。我必须将此格式与从后台获取的另一种格式进行比较。但后台的第一个工作日是星期一,而 iOS 的第
我的日期格式化程序返回nil表示一个特定日期:“1998年3月20日”。 + (NSDate*)dateFromString:(NSString*)date { NSDateFormatter
我知道这篇文章可能一式三份,但是到目前为止,关于现有线程的所有答案都没有帮助我。 我试图从字符串中获取NSDate值,但结果一直是nil。这是我的代码 NSString * dateString =
Crashlytics服务报告一些崩溃(大约30个崩溃/ 18个用户进行1000个 session ) 这是我的代码: var brutDate: String = "" brutDate () (
我正在尝试解析这个日期时间戳 开始串: Wed, 11 Sep 2013 08:51:41 EEST 这个问题只有 EEST , 我试过 z 或 zzz 或 V,什么也没发生。日期格式化程序始终为 N
这个问题在这里已经有了答案: NSDate Format outputting wrong date (5 个回答) 8年前关闭。 我正在使用下面的代码,但它给了我提前一天 date 。 示例 :将输
使用设备上用户的currentLocale,我想要一种与NSDateFormatterFullStyle生成的日期格式完全相同的日期格式减去年份: [dateFormatter setDateStyl
我是一名优秀的程序员,十分优秀!