将 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的主要内容,如果未能解决你的问题,请参考以下文章

从 NStimeInterval 准确转换为 CMTime

将一串数字转换为 NSTimeInterval

为啥核心数据托管对象中的 NSDate 转换为 NSTimeInterval?

NSTimeInterval 到小时和分钟的错误转换

IOS--时间 NSDate,NSTimeInterval的一些转换

NSDate NSString时间字符串 NSTimeInterval 的转换