Wie kann ich seit dem 1. Januar UTC-Zeit in Millisekunden erhalten, 1970 in c Sprache
Frage
Gibt es eine Möglichkeit Millisekunden und sein Bruchteil aus dem Jahr 1970 zu erhalten mit time.h in C-Sprache?
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.