时间戳问题

时间:2011-04-13 03:08:37

标签: c++ timestamp

我有一个时间戳字符串3.44063E+08。如何将其转换为正常时间,如12:10:22等。

3 个答案:

答案 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。