2011-11-20 100 views
1

我試圖以十進制精度在ISO-8601中打印時間。 YYYY-MM-DDTHH:MM:SS.SC:gettimeofday()每次運行產生相同的值

這裏是我的代碼:

#include <sys/time.h> 
#include <time.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

void milli_time(char* dest, struct timeval* t) 
{ 
    struct tm* timeInfo; 
    strftime(dest, 22, "%Y-%m-%dT%t", localtime(&t->tv_sec)); 
    printf("%s\n", dest); 
    fflush(stdout); 
    char deciTime[3]; 
    sprintf(deciTime, ".%lu", ((t->tv_usec)/100000ul)); 

    strcat(dest, deciTime); 
} 

int main() 
{ 
    struct timeval* theTime; 
    char timeString[32]; 
    gettimeofday(theTime, NULL); 
    printf("%lu.%lu\n", theTime->tv_sec, theTime->tv_usec); 
    milli_time(timeString, theTime); 
    printf("%s\n", timeString); 
    fflush(stdout); 
} 

和輸出我每次運行它是:

134520616.3077826840 
1974-04-06T17:50:16 
1974-04-06T17:50:16.30778 

其他的事情,我注意到是tv_usec大於一百萬。

回答

5

變化struct timeval* theTimestruct timeval theTime和更新它的相應的引用:

gettimeofday(&theTime, NULL); 
// etc 

這樣你分配的空間的結構,而不僅僅是一個指針結構。當我嘗試在我的機器上運行代碼時,您的代碼會出現段錯誤。

+0

這工作,非常感謝。 – julianc

相關問題