Wie kann ich seit dem 1. Januar UTC-Zeit in Millisekunden erhalten, 1970 in c Sprache

StackOverflow https://stackoverflow.com/questions/1952290

  •  21-09-2019
  •  | 
  •  

Frage

Gibt es eine Möglichkeit Millisekunden und sein Bruchteil aus dem Jahr 1970 zu erhalten mit time.h in C-Sprache?

War es hilfreich?

Lösung

Dies funktioniert auf Ubuntu Linux:

#include <sys/time.h>

...

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 gibt mir 1338850197035. Sie können an der TimestampConvert.com Website, wo Sie den Wert eingeben das Äquivalent für Menschen lesbare Zeit, um wieder (wenn auch ohne millisekundengenau).

Andere Tipps

Wenn Sie Millisekundenauflösung möchten, können Sie gettimeofday () in Posix verwenden. Für eine Windows-Implementierung finden Sie unter gettimeofday Funktion für Fenster .

#include <sys/time.h>

...

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

Es ist nicht Standard-C, aber gettimeofday() ist in beiden SysV und BSD abgeleitete Systeme 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 */
};

Für Unix und Linux könnten Sie gettimeofday .

Für Win32 könnten Sie GetSystemTimeAsFileTime und dann wandelt es in time_t + Millisekunden .

    // 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;

Unix Zeit oder Posix Zeit die Zeit ist in Sekunden seit Beginn der Epoche erwähnen Sie.

bzabhi 's Antwort ist richtig. Sie multiplizieren Sie einfach den Unix-Zeitstempel von 1000 Millisekunden erhalten

Bitte beachten Sie, dass alle Millisekunden Werte zurückgegeben, indem Sie auf dem Unix-Zeitstempel verlassen wird Multiples von 1000 (wie 12345678000). Die Auflösung ist immer noch nur 1 Sekunde.

Sie können nicht den Bruchteil bekommen

Der Kommentar von Pavel ist auch richtig. Der Unix-Zeitstempel nicht berücksichtigt nicht die Schaltsekunden . Dies macht es noch weniger weise auf einer Umwandlung in Millisekunden zu verlassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top