我有一个时间戳字符串3.44063E+08
。如何将其转换为正常时间,如12:10:22等。
答案 0 :(得分:4)
数值为time_t
,您需要将其转换为分别为localtime()
或gmtime()
的本地或Greenwhich时间,之后您可以strftime()
使用edd@max:/tmp$ cat timeformat.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
time_t tt = 3.44063E+08;
struct tm tm;
char buf[32];
tm = *localtime(&tt);
strftime(buf, 31, "%Y-%m-%d %H:%M:%S", &tm);
printf("%s\n", buf);
return 0;
}
edd@max:/tmp$ gcc -o timeformat timeformat.c
edd@max:/tmp$ ./timeformat
1980-11-25 23:03:20
edd@max:/tmp$
以您选择的格式打印。
以下是一个快速而完整的示例:
{{1}}
编辑:当您标记问题C ++时,请查看Boost Date_Time,其中包含很多内容。但正如我的例子所示,对于简单的“数字到文本”转换,您不需要它。
答案 1 :(得分:1)
指数格式的时间戳意味着某人正在使用浮点时间计数器,并且在编写打印代码时没有注意。如果您拥有的只是那段文字,那么您将无法将其转换为准确的时间,因为它只能精确到1000秒(约20分钟)。如果您确实将原件作为双面打印,则可以从中获得准确的时间。如果你把它作为漂浮物,上帝帮助你。
这个数字是(可能)一个time_t,它是自Unix时代(1970年1月1日)以来的秒数。您可以使用gmtime()或localtime()将其转换为细分的时间结构(年,月等),然后使用strftime()将其转换为您想要的任何文本格式。如果您只有文本而不是实际数字,则必须先使用strtod()将其解析为数字。
答案 2 :(得分:1)
更多的上下文会有用,但假设你已经拥有它,3.44063E + 08是344063000,作为time_t转换为1980-11-26 05:03:20(utc)。如果这对你作为时间戳有意义,那么它是time_t:自1970-01-01以来的秒数。
另一种可能性是它来自Excel或其他Microsoft Office产品,它将日期存储为自1900年以来的日期,或在某些情况下存储为1899年。这转换为943,893年的某个日期。如果这是有道理的,比如你正在进行天文或慢速放射性同位素计算等,那么它是在当天早些时候,大约03:42。