Comment puis-je obtenir le timestamp unix en C comme un int?
Je voudrais obtenir le timestamp actuel et l'imprimer à l'aide de fprintf
.
- Est-il une raison particulière pour laquelle il doit expressément être un int?
- Si je devais deviner, il a sans doute voulu obtenir le timestamp comme le code de retour et découper la sortie de manutention.
- Désolé pour necrobump cela, mais, techniquement, toutes ces réponses sont incorrectes depuis
time
est pas la garantie d'être depuis l'époque Unix; selon Wikipedia, il peut être n'importe quelle époque que le vendeur choisit. Il a également dit 1900 est parfois utilisé. Cependant, je suppose que c'est depuis l'époque Unix sur tous, même à distance saine des systèmes.
InformationsquelleAutor Tim | 2012-08-01
Vous devez vous connecter pour publier un commentaire.
Pour les systèmes 32 bits:
Pour les systèmes 64 bits:
time_t
(retourné par latime
) se résout par l'exécution de préprocesseur sur votre fichier C (cpp main.c
). Sur mon système 64 bitstime_t
estlong int
, ce qui conduit à%ld
spécification de conversion.#include <time.h>
Est juste un moulage de la valeur retournée par
time()
ce que vous voulez?
Pour obtenir microsecondes depuis l'époque, de C11, le portable est d'utiliser
Malheureusement, C11 n'est pas encore disponible partout, de sorte que, désormais, le plus proche de portable est à l'aide de l'une des fonctions POSIX
clock_gettime
ougettimeofday
(marqué comme obsolète dans POSIX.1-2008 date, qui recommandeclock_gettime
).Le code des deux fonctions est presque identique:
int
n'est pas le type approprié sur presque(?) tous les systèmes courants. Avec typiqueINT_MAX = 2147483647
, si vous voulez microsecondes, vous pouvez juste s'adapter à un peu moins de 36 minutes enint
. Et bien sûr, en général, vous ne pouvez pas utilisertime()
ensuite. De façon portable, vous devez utiliser letimespec_get()
ensuite. Qu'est-ce que vous voulez? Le timestamp Unix, ou microsecondes (depuis l'époque)?timespec_get
est nouveau en C11, de sorte que la portabilité est un problème.Avec précision de seconde, vous pouvez imprimer
tv_sec
champ detimeval
structure que vous obtenez à partir degettimeofday()
fonction. Par exemple:Exemple de compilation et de l'exécution:
Noter, cependant, que sa fait un moment depuis l'époque et donc
long int
est utilisé pour ajuster un certain nombre de secondes, ces jours-ci.Il existe aussi des fonctions d'impression de l'homme lisible à la fois. Voir cette page de manuel pour plus de détails. Voici un exemple d'utilisation de
ctime()
:Exemple run & sortie:
gettimeofday
est le réel Linux syscall.Et obtiennent un résultat similaire à:
Secondes depuis le 1er janvier 1970 = 1476107865