Gibt es eine Möglichkeit, Millisekunden und seinen Bruchteil von 1970 mit time.h in c-Sprache zu erhalten?Wie bekomme ich UTCTime in Millisekunde seit dem 1. Januar 1970 in c Sprache
Antwort
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).
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.
Jede andere Bibliothek, die genau die Milisekunde einschließlich ihres Bruchteils erhalten kann ????? – Siddiqui
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
Für Unix und Linux können Sie gettimeofday verwenden. Für Win32 können Sie GetSystemTimeAsFileTime und dann convert it to time_t + milliseconds verwenden.
gettimeofday() tut was benötigt wird. Hier ist ein Codebeispiel: http://www.docs.hp.com/en/B9106-90009/gettimeofday.2.html Also welche Betriebssysteme versucht Aman zu unterstützen? – tpgould
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 */
};
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;
// 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;
Sie können den Bruchteil nicht in einer plattformunabhängigen Weise erhalten. Auf welche Plattform fokussieren Sie sich? – dalle
Ich befolge den Standard von ANSI C, damit meine Anwendung plattformunabhängig ist. Momentan bin ich auf der Fensterplattform. – Siddiqui