将秒转换为小时,分钟和秒

时间:2013-12-07 13:41:23

标签: ios objective-c nsnotification

我正在制作一个秒表应用程序。我正在计算应用程序在后台运行的时间,以便在应用程序返回到前台时将其添加到秒表时间。我有这个代码,当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保持不变。为什么不起作用?

3 个答案:

答案 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}')