2011-04-13 249 views
1

我得到了一个时间戳字符串,因为这个3.44063E+08。我怎样才能将其转换为正常时间,如12时10分22秒,等时间戳问题

+1

你从哪里得到它的? – casablanca 2011-04-13 03:10:25

+0

你从哪里得到时间戳? _你有时间戳吗?换句话说,请说明你已经拥有了什么。 – 2011-04-13 03:11:03

+0

我从winxp系统应用程序日志文件中得到 – 2011-04-13 03:11:10

回答

4

的数值是time_t,你需要把它其中localtime()gmtime(),分别转换为本地或Greenwhich时间之后,你可以使用strftime()以您选择的格式打印。

这里是一个快速和完整的例子:

[email protected]:/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; 
} 
[email protected]:/tmp$ gcc -o timeformat timeformat.c 
[email protected]:/tmp$ ./timeformat 
1980-11-25 23:03:20 
[email protected]:/tmp$ 

编辑:而当你标记你的问题C++,看看Boost Date_Time其中有很多提供给。但正如我的示例所示,对于简单的“数字到文本”转换,您并不需要它。

1

指数格式的时间戳表示有人使用浮点时间计数器,并且在编写代码打印时没有注意。如果您只有一段文字,则无法将其转换为准确的时间,因为它只能精确到1000秒(大约20分钟)。如果您真的将原件作为双份,您可以从中获得准确的时间。如果你把它当作浮动,上帝会帮助你。

该数字(可能)是一个time_t,它是Unix时代(1970年1月1日)以来的秒数。您可以使用gmtime()或localtime()将其转换为分解时间结构(年,月等),然后使用strftime()将其转换为任何文本格式。如果你只有文本而不是实际的数字,你必须首先使用strtod()将其解析为数字。

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。