我正在做一个秒表应用程序。我正在计算自应用程序处于后台以来所经过的时间,这样当应用程序返回到前台时,我可以将其添加到秒表时间中。我有这个代码,当一个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,但仅此而已;elapsedTime小时/分钟/秒都保持为0,而elapsedTime保持不变。为什么它不起作用?
发布于 2013-12-07 21:50:26
这种方法似乎过于复杂且容易出错。
为什么不记录开始时间(如NSTimeInterval或NSDate),然后从当前时间减去它,得到经过的秒数?
发布于 2013-12-07 21:45:47
您正在从elapsedTime中减去错误的部分。你应该减去小时数,而不是余数:
elapsedTime = elapsedTime - (elapsedTime / 3600) * 3600;或者你可以使用等价的计算方法:
elapsedTime = elapsedTime % 3600;发布于 2020-09-28 19:17:40
使用类型转换float到int将秒转换为h
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}')https://stackoverflow.com/questions/20442026
复制相似问题