2009-12-23 30 views

Antwort

32

Dies funktioniert auf Ubuntu Linux:

struct timeval tv; 

gettimeofday(&tv, NULL); 

unsigned long long millisecondsSinceEpoch = 
    (unsigned long long)(tv.tv_sec) * 1000 + 
    (unsigned long long)(tv.tv_usec)/1000; 

printf("%llu\n", millisecondsSinceEpoch); 

Zum Zeitpunkt des Schreibens dieses Artikels, die printf (oben) mir 1338850197035. schenken Sie können an der TimestampConvert.com Website eine Plausibilitätsprüfung tun, wo man Geben Sie den Wert ein, um die entsprechende vom Menschen lesbare Zeit zurückzuerhalten (allerdings ohne Millisekunden-Genauigkeit).

1

ist die Zeit in Sekunden seit der Epoche, die Sie erwähnten.

bzabhi ist die Antwort richtig: Sie multiplizieren einfach den Unix-Zeitstempel mit 1000, um Millisekunden zu erhalten.

Beachten Sie, dass alle Millisekunden-Werte, die mit dem Unix-Zeitstempel zurückgegeben werden, Vielfache von 1000 (wie 12345678000) sind. Die Auflösung beträgt immer noch nur 1 Sekunde.

Sie können nicht den Bruchteil erhalten

Der Kommentar von Pavel auch richtig ist. Der Unix-Zeitstempel berücksichtigt keine Schaltsekunden. Dies macht es noch weniger sinnvoll, sich auf eine Umwandlung in Millisekunden zu verlassen.

+0

Jede andere Bibliothek, die genau die Milisekunde einschließlich ihres Bruchteils erhalten kann ????? – Siddiqui

+0

Der Unix-Zeitstempel ist so grundlegend wie möglich. Es muss sein, dass die Entwickler von Unix dachten, eine Sekunde Auflösung sei genug. Andererseits lag der Aufwand für die Aufrechterhaltung einer 1ms-Auflösung wahrscheinlich über frühen Unix-Systemen. – pavium

6

Es ist nicht Standard C, aber gettimeofday() ist sowohl in SysV und BSD abgeleiteten Systemen vorhanden, und ist in POSIX. Es gibt die Zeit seit der Epoche in einem struct timeval:

struct timeval { 
    time_t  tv_sec;  /* seconds */ 
    suseconds_t tv_usec; /* microseconds */ 
}; 
9

Wenn Sie Millisekundenauflösung möchten, können Sie gettimeofday() in Posix verwenden können. Für eine Windows-Implementierung siehe gettimeofday function for windows.

#include <sys/time.h> 

... 

struct timeval tp; 
gettimeofday(&tp); 
long int ms = tp.tv_sec * 1000 + tp.tv_usec/1000; 
+3

Es sollte wahrscheinlich 'gettimeofday (& TV, NULL)' – puk

+1

Der Link in der Antwort ist tot. Die Domain existiert nicht. – owacoder

1
// the system time 
    SYSTEMTIME systemTime; 
    GetSystemTime(&systemTime); 

    // the current file time 
    FILETIME fileTime; 
    SystemTimeToFileTime(&systemTime, &fileTime); 

    // filetime in 100 nanosecond resolution 
    ULONGLONG fileTimeNano100; 
    fileTimeNano100 = (((ULONGLONG) fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime; 

    //to milliseconds and unix windows epoche offset removed 
    ULONGLONG posixTime = fileTimeNano100/10000 - 11644473600000; 
    return posixTime; 
Verwandte Themen