C Snippets

Extraits de timestamp Unix en C

Exemples C pour obtenir le timestamp Unix actuel, convertir des secondes epoch en date lisible avec strftime() et construire des timestamps à partir de dates de calendrier avec timegm().

Current Unix timestamp (seconds)
#include <time.h>

time_t ts = time(NULL);
Current timestamp (milliseconds, POSIX)
#include <time.h>

struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
long ms = (long)ts.tv_sec * 1000L + ts.tv_nsec / 1000000L;
Format timestamp as UTC string
#include <time.h>
#include <stdio.h>

time_t ts = 1700000000;
struct tm *tm_info = gmtime(&ts);  // UTC
char buf[64];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm_info);
printf("%s\n", buf);  // "2023-11-15 06:13:20"
Format timestamp as local time string
#include <time.h>

time_t ts = 1700000000;
struct tm *tm_info = localtime(&ts);  // host timezone
char buf[64];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm_info);
Timestamp from calendar date (UTC, GNU)
#define _GNU_SOURCE
#include <time.h>

struct tm t = {0};
t.tm_year = 2023 - 1900;  // years since 1900
t.tm_mon  = 10;           // 0-indexed; 10 = November
t.tm_mday = 15;
t.tm_hour = 6;
t.tm_min  = 13;
t.tm_sec  = 20;
time_t ts = timegm(&t);   // GNU/POSIX; use mktime() for local
Time difference in seconds
#include <time.h>

time_t start = time(NULL);
/* ... work ... */
time_t end = time(NULL);
double elapsed = difftime(end, start);

Bases des horodatages en C

C représente le temps Unix par time_t, un type entier signé défini dans <time.h>. Sur les systèmes 64 bits, time_t fait 64 bits et est immunisé contre le dépassement de l'an 2038. Sur les systèmes 32 bits, il fait encore 32 bits sur de nombreuses plateformes ; vérifiez sizeof(time_t) pour confirmer. La fonction standard time(NULL) renvoie le temps Unix actuel en secondes.

gmtime vs localtime

gmtime() convertit un time_t en struct tm en UTC. localtime() convertit vers le fuseau local du système hôte. Utilisez toujours gmtime() quand vous avez besoin d'un résultat reproductible et indépendant du fuseau. Les deux fonctions renvoient un pointeur vers un struct statique partagé ; copiez le résultat dans une variable locale struct tm si vous en avez besoin entre des appels de fonction.

Notes de production pour C

Préférez clock_gettime(CLOCK_REALTIME) à gettimeofday() pour une précision infra-seconde ; POSIX marque gettimeofday() comme obsolescent. Utilisez timegm() (GNU/BSD) ou un équivalent portable pour convertir des dates calendaires en horodatages UTC ; mktime() interprète son entrée comme de l'heure locale, ce qui produit silencieusement des résultats erronés dans des environnements non UTC.

  • Vérifiez sizeof(time_t) sur les cibles embarquées ; le time_t 32 bits déborde en janvier 2038
  • Utilisez gmtime_r() et localtime_r() dans du code multithread pour éviter les accès concurrents
  • Les chaînes de format de strftime() sont indépendantes de la locale ; préférez %Y-%m-%d à %x pour l'interopérabilité
  • timegm() n'est pas dans POSIX ; utilisez _mkgmtime() sous Windows ou implémentez-le manuellement avec mktime() + décalage UTC

Convertir l'heure Linux : date(1), time_t, gmtime, strftime

Les recherches « convert linux time » ou de conversion d'horodatage Linux désignent généralement la commande shell date(1) ou les fonctions time_t de la bibliothèque C ci-dessous. Linux stocke l'horodatage Unix sous forme de time_t — signé 32 bits sur les systèmes hérités (limite Y2038), signé 64 bits sur les modernes.

  • Shell (GNU date) : date -u -d @1700000000 — epoch → date UTC
  • Shell (BSD/macOS) : date -ur 1700000000 — notez -r au lieu de -d @
  • Shell époque actuelle : date +%s (secondes), date +%s%3N (ms, GNU uniquement)
  • Bibliothèque C : time_t t = time(NULL); struct tm *u = gmtime(&t); strftime(buf, sizeof(buf), '%Y-%m-%dT%H:%M:%SZ', u);
  • Bibliothèque C : timegm(struct tm *) renvoie un time_t pour une heure calendaire UTC
  • POSIX time_t : signé 32 bits déborde le 2038-01-19 ; le time_t 64 bits est la solution moderne

Temps epoch Linux, horodatage Linux vers heure, convertisseur Linux en ligne

Variantes : « linux epoch time » (temps Unix sous Linux), « linux timestamp to time » (epoch → horloge murale), « linux timestamp converter online » (cette page).

  • Linux epoch time / linux epoch time — identique au temps Unix ; valeur actuelle : date +%s
  • Linux timestamp to time / linux timestamp to time — date -u -d @1700000000 renvoie l'heure d'horloge murale en UTC
  • Linux timestamp converter online / linux timestamp converter online — cette page est l'équivalent navigateur de date(1)

FAQ

Quel type utiliser pour les horodatages Unix en C ?
Utilisez time_t pour la précision à la seconde et int64_t (de <stdint.h>) quand vous devez stocker des millisecondes ou des nanosecondes. Évitez int ou long car leurs tailles dépendent de la plateforme.
Comment obtenir des millisecondes en C ?
Utilisez clock_gettime(CLOCK_REALTIME, &ts) de <time.h>. Le résultat est dans ts.tv_sec (secondes) et ts.tv_nsec (nanosecondes). Calculez les millisecondes par ts.tv_sec * 1000LL + ts.tv_nsec / 1000000.