Comment puis-je obtenir l'heure UTC en milliseconde depuis le 1er Janvier 1970 à c langue

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

  •  21-09-2019
  •  | 
  •  

Question

Est-il possible d'obtenir millisecondes et sa partie de fraction de 1970 à l'aide time.h en langage C?

Était-ce utile?

La solution

Cela fonctionne sur 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);

Au moment où nous écrivons ces lignes, le printf () ci-dessus me donne 1338850197035. Vous pouvez faire une vérification de la santé mentale au TimestampConvert.com site où vous pouvez entrer la valeur pour récupérer l'équivalent temps lisible par l'homme (mais sans précision milliseconde).

Autres conseils

Si vous voulez la milliseconde, vous pouvez utiliser gettimeofday () dans Posix. Pour une implémentation Windows voir gettimeofday fonction pour les fenêtres .

#include <sys/time.h>

...

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

Il est pas standard C, mais gettimeofday() est présent dans les systèmes dérivés SysV et BSD, et est en Posix. Il retourne le temps écoulé depuis l'époque dans un struct timeval:

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

Pour Unix et Linux, vous pouvez utiliser gettimeofday .

Pour Win32, vous pouvez utiliser GetSystemTimeAsFileTime puis convertir en time_t + millisecondes .

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

temps Unix ou le temps Posix est le temps en secondes vous avez mentionné depuis l'époque.

bzabhi réponse de est correcte. Vous multipliez simplement l'horodatage Unix par 1000 pour obtenir millisecondes

Sachez que toutes les valeurs de milliseconde renvoyées en se basant sur l'horodatage Unix seront multiples de 1000 (comme 12345678000). La résolution est toujours seulement 1 seconde.

Vous ne pouvez pas obtenir la partie de la fraction

Le commentaire de Pavel est correct aussi. L'horodatage Unix ne prend pas en secondes bissextiles . Cela rend encore moins sage de compter sur une conversion en millisecondes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top