time_t et l’Epoch Unix
Dans un environnement POSIX, time_t représente le temps en secondes depuis l’Epoch. Le langage C seul ne garantit pas cette représentation sur toutes les plateformes. Ne supposez pas non plus que time_t possède toujours 32 bits.
Afficher un timestamp en UTC
#include <stdio.h>
#include <time.h>
int main(void) {
time_t timestamp = (time_t)1711972800;
struct tm *utc = gmtime(×tamp);
char output[32];
if (utc == NULL) return 1;
if (strftime(output, sizeof output,
"%Y-%m-%dT%H:%M:%SZ", utc) == 0) return 1;
puts(output); /* 2024-04-01T12:00:00Z */
return 0;
}Calculer une différence
difftime(end, start) calcule une différence en secondes. Il évite de supposer directement le type arithmétique sous-jacent à time_t.
time_t start = (time_t)1711972800;
time_t end = (time_t)1711981800;
double elapsed = difftime(end, start);
/* elapsed = 9000.0 */Les points à vérifier
gmtimeaffiche UTC ;localtimeutilise le fuseau local.- Les fonctions historiques peuvent utiliser une zone mémoire partagée. Dans un programme concurrent POSIX, étudiez les variantes
gmtime_retlocaltime_r. mktimeinterprète une date locale. Il ne faut pas l’utiliser comme convertisseur UTC implicite.- Pour mesurer une durée d’exécution POSIX, utilisez
clock_gettime(CLOCK_MONOTONIC, ...).
Vérifiez la taille et les capacités de la bibliothèque pour les dates au-delà de 2038. Le type du processeur ne suffit pas à déterminer tous les formats manipulés.