将 NSTimeInterval 持续时间转换为 NSString
Posted
技术标签:
【中文标题】将 NSTimeInterval 持续时间转换为 NSString【英文标题】:Convert a NSTimeInterval duration into NSString 【发布时间】:2010-10-28 09:27:42 【问题描述】:我是 iphone 开发的新手。我有一个问题。我想在 NSString 中转换一个 NSTimeInterval 值,但不能成功。请快速查看以下代码。
在.h中
NSTimeInterval startTime;
NSTimeInterval stopTime;
NSTimeInterval duration;
在.m
startTime = [NSDate timeIntervalSinceReferenceDate];
stopTime = [NSDate timeIntervalSinceReferenceDate];
duration = stopTime-startTime;
NSLog(@"Duration is %@",[NSDate dateWithTimeIntervalSinceReferenceDate: duration]);
NSLog(@"Duration is %@", [NSString stringWithFormat:@"%f", duration]);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *time = [dateFormatter stringFromDate:duration];----> Error
[dateFormatter release];
在一个标签上设置这个字符串----
[timeLabel setText:time];
但它不起作用,它显示错误:'stringFromDate:'的参数 1 的类型不兼容
如果我评论该行,它会在控制台窗口中显示正确的持续时间。
感谢您的帮助。
【问题讨论】:
【参考方案1】:来自NSDateFormatter class reference:
- (NSString *)stringFromDate:(NSDate *)date
^^^^^^^^ the type of the argument
来自您的代码:
NSTimeInterval duration;
^^^^^^^^^^^^^^ the type of what you are passing.
错误提示“类型不兼容”。你认为这意味着什么?也许 NSTimeInterval 与 NSDate* 不兼容。以下是文档对NSTimeInterval 的评价:
typedef double NSTimeInterval;
NSTimeInterval 总是以秒为单位指定...
错误告诉您编译器无法将 NSTimeInterval(实际上是双精度)转换为指向 NSDate 的指针。这真的不足为奇。由于 NSTimeInterval 确实是双精度类型,因此您可以使用 %f
格式说明符轻松将其转换为字符串。
foo = [NSString stringWithFormat: @"%f", timeInterval];
【讨论】:
感谢大家的快速响应。根据你的建议,我知道我将传递不同的参数类型。现在它的工作正常。再次感谢 Vladimir、Toro 和 JeremyP。 你指出 NSTimeInterval 是双精度的,我需要以毫秒为单位的时间,所以我将它乘以 1000 并解决了我的问题。【参考方案2】:NSTimeInterval 实际上是一个双精度数,因此要将其转换为字符串,您只需使用
NSString *time = [NSString stringWithFormat:@"%f", duration];
【讨论】:
【参考方案3】:NSString *time = [dateFormatter stringFromDate:duration];----> Error
这个持续时间不是类NSDate,所以它不能被这个名为stringFromDate的方法转换。 正如弗拉基米尔所说,NSTimeInterval 是双倍的,用他的方法你可以得到正确的 NSString。
【讨论】:
以上是关于将 NSTimeInterval 持续时间转换为 NSString的主要内容,如果未能解决你的问题,请参考以下文章
为啥核心数据托管对象中的 NSDate 转换为 NSTimeInterval?