使用负值计算'timeIntervalSinceNow'(CLLocation示例)?

时间:2012-04-03 01:56:19

标签: objective-c cllocation nstimeinterval

我不明白文档中的这个示例:timeIntervalSinceNow方法应该显示正值,但我们如何才能达到代码中提到的“5”? (我认为它或者更多或更少,或者-10,-20,-30等......但是我们怎样才能获得正值,比如5?):

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    // test the age of the location measurement to determine if the measurement is cached
    // in most cases you will not want to rely on cached measurements
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;

感谢您的帮助

2 个答案:

答案 0 :(得分:9)

如果timeIntervalSinceNow调用的结果是否定的(意味着时间戳是过去的(在这种情况下,它始终是),则它将被转换为正数。例如-2.5将成为+2.5(反之亦然)。

然后测试反转符号值,看它是否大于5.0 - 在这种情况下,这意味着时间戳是超过五秒前。如果是,则不对位置数据执行任何操作,因为它太旧而无法使用。

就我个人而言,如果没有符号反转,我会在测试中使用负数来写这个:

 if( [[newLocation timestamp] timeIntervalSinceNow] < -5.0 ) return;

答案 1 :(得分:3)

这就是NSDate文档对timeIntervalSinceNow所说的内容:

  

接收器与当前日期和时间之间的间隔。如果接收者早于当前日期和时间,则返回值为负。

在这种情况下,时间戳记录在过去,它将始终早于“现在”。另一方面,如果你使用timeIntervalSince1970,结果将是正数。