可读格式的毫秒数?

时间:2013-02-17 15:19:39

标签: c++

我想将毫秒转换为人类可读的字符串。

所以它看起来像1:59:23(1小时59分23秒)。

我试过这个:

    int hours = (metaData["duration"].toInt()/(1000 * 60 * 60));
    int mins = (metaData["duration"].toInt()/(1000 * 60));
    int seconds = (metaData["duration"].toInt()/1000);

但是这只是给出总数,即它会说出总分钟数和总秒数,它不会考虑到60秒变成一分钟,所以不要在秒计数中包含它

有没有人有办法做到这一点?

由于

3 个答案:

答案 0 :(得分:1)

您需要使用模数函数来提取有多少分钟和秒。

int hours = (metaData["duration"].toInt()/(1000 * 60 * 60));
int mins = (metaData["duration"].toInt()/(1000 * 60)) % 60;
int seconds = (metaData["duration"].toInt()/1000) % 60;

模数函数在除以某事时返回余数。因此,使用% 60,您最终得到的秒数,忽略完整的分钟数,同样数分钟。

答案 1 :(得分:1)

稍微修改您的代码。

int hours = (metaData["duration"].toInt()/(1000 * 60 * 60));
// 60 mins = 1 hour
int mins = (metaData["duration"].toInt()/(1000 * 60)) % 60;
// 60 secs = 1 min
int seconds = (metaData["duration"].toInt()/1000) % 60;

答案 2 :(得分:0)

我使用以下代码,其中 totalf 包含毫秒值,输出类型为:

Days.Hours:分钟:Seconds.Millisecods例如12.23:59:59.123

unsigned int r,d,h,m,s,f;
r = abs(totalf);
d = r / 86400000;
r = r % 86400000;
h = r / 3600000;
r = r % 3600000;
m = r / 60000;
r = r % 60000;
s = r / 1000;
f = r % 1000;

char str[128];

if (totalf<0)
    sprintf(str, "-%d.%02d:%02d:%02d.%03d", d, h, m, s, f);
else
    sprintf(str, "%d.%02d:%02d:%02d.%03d", d, h, m, s, f);