0

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

所以它看起来像 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秒变成一分钟,所以不要将它包括在秒数中。

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

谢谢

4

3 回答 3

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您最终得到的秒数,忽略整分钟,同样也忽略分钟。

于 2013-02-17T15:21:13.873 回答
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;
于 2013-02-17T15:21:43.797 回答
0

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

Days.Hours:Minutes: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);
于 2017-07-30T10:27:23.167 回答