我想将毫秒转换为人类可读的字符串。
所以它看起来像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秒变成一分钟,所以不要在秒计数中包含它
有没有人有办法做到这一点?
由于
答案 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);