有没有一种通用的、方便的、跨平台的方法来转换“HH:MM:SS”格式的字符串?在C或C++中转换为(时间增量)数值类型,反之亦然?
发布于 2012-12-25 02:36:30
对于这个特定的问题,strptime
是最好的可移植性。它不在C标准库中(即使它已经被添加,因为C89、C99和C2011的可移植性并不比POSIX更好(非常感谢微软)),但是它足够广泛,我的建议是编写代码就像它是通用的一样,然后检测到它在构建系统中的缺失并注入一个替代品。你可以在这里获得一个获得BSD许可的替代品:http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/time/strptime.c?rev=HEAD (可能需要可移植性调整)
发布于 2012-12-25 03:18:18
这并不是很难(我假设你的时间是机器生成的,而不是手写的,所以我们可以相信它是“正确的”-否则,我们必须添加大量的"is this value in range“检查)。我还将假设分数始终是相同的位数。
int64_t parsetime(char *str)
{
int hh, mm, ss, fract;
int64_t t;
if (sscanf(str, "%d:%d:%d.%d", &hh, &mm, &ss, &fract) != 4)
{
printf("Badly formed time %s\n", str);
return -1;
}
// 1000000 assumes there are 6 digits in fract, and we want microseconds.
t = ((hh * 60) + mm *60) + s) * 1000000 + fract;
return t;
}
你可以做一些类似的事情,使用double
和%d:%d:%lf
作为格式字符串,然后乘以相关的乘数,得到整数形式的分数(例如,1000代表毫秒,1000000代表微秒,100000000代表纳秒,等等)
https://stackoverflow.com/questions/14024571
复制相似问题