La fonction heure de time.h donne des millisecondes depuis l'époque.Comment obtenir des millisecondes depuis minuit UTC en C?
Répondre
Vous utilisez gettimeofday (2) qui est défini dans POSIX.1 et BSD.
Il renvoie des secondes et des microsecondes comme défini dans struct timeval à partir de sys/time.h.
Vous trouverez des exemples de code C
pour obtenir du temps et le convertir en différents formats here.
Ceci est un moyen simple:
time_t seconds_since_midnight = time(NULL) % 86400;
Pour obtenir millisecondes approximatives depuis minuit, multipliez par seconds_since_midnight
1000.
Si vous avez besoin d'une résolution plus (si vous considérez vraiment faire), vous devrez utilisez une autre fonction telle que gettimeofday()
.
Jetez un oeil à gmtime() convertit directement à temps universel coordonné (UTC) ...
Ceci est la façon précise:
struct timeval tv;
int msec = -1;
if (gettimeofday(&tv, NULL) == 0)
{
msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec/1000);
}
qui stockera dans msec
le nombre de millisecondes depuis minuit. (ou -1 s'il y avait une erreur est survenue lors du temps.)
Bien qu'il soit généralement une mauvaise idée pour stocker le temps des valeurs dans un int
, je suis un peu cavalière et en supposant int
est d'au moins 32 bits , et peut facilement accommoder la gamme (-1) à 86 400 000.
Mais je ne sais pas si cela en vaut la peine.
Il semble y avoir quelque chose de mal avec votre code, selon le C que je connais. Peut-être que vous auriez dû déclarer 'msec' à l'avance, aussi' else'. – ThoAppelsin
@ThoAppelsin Bon point. Corrigée. Merci! – scraimer
En fait, la fonction time() donne le temps en secondes, et non en millisecondes, depuis l'époque (et ignore les secondes intercalaires). –