Quelle est la meilleure méthode pour imprimer l'heure en C au format 2009‐08‐10
18:17:54.811
?
96
Utilisez strftime () .
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;
char buffer[26];
struct tm* tm_info;
timer = time(NULL);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
puts(buffer);
return 0;
}
Pour une partie des millisecondes, jetez un œil à cette question. Comment mesurer le temps en millisecondes en utilisant ANSI C?
time(&timer)
devrait plutôt êtretimer = time(NULL);
, du moins pour Linux.The tloc argument is obsolescent and should always be NULL in new code. When tloc is NULL, the call cannot fail.
Les réponses ci-dessus ne répondent pas entièrement à la question (en particulier la partie millisec). Ma solution consiste à utiliser gettimeofday avant strftime. Faites attention à ne pas arrondir le millisec à "1000". Ceci est basé sur la réponse de Hamid Nazari.
la source
gettimeofday
n'est pas disponible sur les implémentations Windowstime.h
définit unestrftime
fonction qui peut vous donner une représentation textuelle d'un entime_t
utilisant quelque chose comme:mais cela ne vous donnera pas une résolution inférieure à la seconde car elle n'est pas disponible à partir d'un fichier
time_t
. Il sort:Si vous êtes vraiment contraint par les spécifications et que vous ne voulez pas d'espace entre le jour et l'heure, supprimez-le simplement de la chaîne de format.
la source
Le code suivant s'imprime avec une précision de l'ordre de la microseconde. Tout ce que nous avons à faire est d'utiliser
gettimeofday
andstrftime
ontv_sec
et d'ajoutertv_usec
à la chaîne construite.la source
Vous pouvez utiliser
strftime
, maisstruct tm
n'a pas de résolution pendant des parties de secondes. Je ne sais pas si c'est absolument nécessaire à vos fins.la source
tour:
la source
Aucune des solutions de cette page n'a fonctionné pour moi, je les ai mélangées et les ai faites fonctionner avec Windows et Visual Studio 2019, voici comment:
Résultat :
la source