计算 2 个 NSDate 之间的时间(以秒为单位)

Calculate time in seconds between 2 NSDates

我无法计算 "old" 和 "now" NSDate 的输出。这是代码:

NSLog(@"past is %@", past);
NSDate *now = [NSDate date];

NSLog(@"Now time is is %@", now);

NSTimeInterval distanceBetweenDates = [now timeIntervalSinceDate:past];
double secondsInAnHour = 3600;
NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

NSLog(@" Time between is %i", hoursBetweenDates);

控制台输出如下:

2015-11-11 18:52:35.608 TaskTimer[2578:130664] past is 2015-11-11 15:52:02 +0000
2015-11-11 18:52:35.608 TaskTimer[2578:130664] now is 2015-11-11 15:52:35 +0000
2015-11-11 18:52:35.609 TaskTimer[2578:130664]  Time between is 0

我想补充一点,即使两个值之间的时间超过几分钟,最后一个值也是 0。为什么是 0?

因为您要转换为整数并且它会向下舍入。任何小于特定整数值的值都会向下舍入。几分钟小于 1,所以你会得到 0 小时。

如果您想四舍五入到最接近的值,则使用 round(distanceBetweenDates / secondsInAnHour),或者要四舍五入,您可以使用 ceil(distanceBetweenDates / secondsInAnHour)(尽管它也会将 2.1 舍入到 3)

你们两个约会之间相隔了 33 分钟,不到一小时。

NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

该语句正在丢失小数精度,并向下舍入为 0,这就是您所显示的。

另一种方法是使用 NSDateComponentsFormatter

以 hh:mm:ss 格式显示
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute |
    NSCalendarUnitSecond;

NSLog(@"Time between is %@", [formatter stringFromTimeInterval:distanceBetweenDates]);