我正在制作一个秒表应用程序。我正在计算应用程序在后台运行的时间,以便在应用程序返回到前台时将其添加到秒表时间。我有这个代码,当NSNotification发送到我的StopwatchViewController时,调用的代码是以秒为单位的经过时间。我想把秒转换成小时,分钟和秒:
-(void)newMessageReceived:(NSNotification *) notification
{
elapsedTime = [[notification object] intValue];
elapsedHours = elapsedTime / 3600;
elapsedTime = elapsedTime - (elapsedTime % 3600);
elapsedMinutes = elapsedTime / 60;
elapsedTime = elapsedTime - (elapsedTime % 60);
elapsedSeconds = elapsedTime;
secondInt = secondInt + elapsedSeconds;
if (secondInt > 59) {
++minuteInt;
secondInt -= 60;
}
minuteInt = minuteInt + elapsedMinutes;
if (minuteInt > 59) {
++hourInt;
minuteInt -= 60;
}
hourInt = hourInt + elapsedHours;
if (hourInt > 23) {
hourInt = 0;
}
}
通知对象被分配给elapsedTime,但就是这样; elapsedHours / minutes / seconds都保持为0,并且elapsedTime保持不变。为什么不起作用?
答案 0 :(得分:2)
这种方法似乎过于复杂且容易出错。
为什么不记录开始时间(作为NSTimeInterval或NSDate)并从当前时间减去该值以获得经过的秒数?
答案 1 :(得分:1)
您正在从elapsedTime中减去错误的部分。你应该减去小时而不是余数:
elapsedTime = elapsedTime - (elapsedTime / 3600) * 3600;
或者您可以使用等效计算:
elapsedTime = elapsedTime % 3600;
答案 2 :(得分:0)
使用类型转换float转换为int转换以h m s为单位的秒数
seconds = 111222333 # example
h = (seconds/60/60)
m = (h-int(h))*60
s = (m - int(m))*60
检查结果
print(f'{h:.0f} {m:.0f} {s:.0f}')