2011-04-13 247 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。