J'ai quelque chose comme ça:
char *current_day, *current_time;
system("date +%F");
system("date +%T");
Il affiche le jour et l'heure actuels dans la sortie standard, mais je souhaite obtenir cette sortie ou les affecter aux variables current_day
et current_time
, afin de pouvoir effectuer ultérieurement un traitement avec ces valeurs.
current_day ==> current day
current_time ==> current time
La seule solution à laquelle je puisse penser maintenant est de diriger la sortie vers un fichier, puis de lire le fichier, puis d'attribuer les valeurs de date et d'heure à current_day
et current_time
. Mais je pense que ce n'est pas un bon moyen. Y a-t-il un autre moyen court et élégant?
Utilisez time()
et localtime()
pour obtenir l'heure:
#include <time.h>
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
time_t rawtime;
time ( &rawtime );
struct tm *timeinfo = localtime ( &rawtime );
Vous pouvez également utiliser strftime
pour formater l’heure en chaîne.
strftime
(C89)
Martin l'a mentionné , voici un exemple:
principal c
#include <stdio.h>
#include <time.h>
int main(void) {
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char s[64];
strftime(s, sizeof(s), "%c", tm);
printf("%s\n", s);
return 0;
}
Compiler et exécuter:
gcc -std=c89 -Wall -Wextra -pedantic -o main.out main.c
./main.out
Exemple de sortie:
Thu Apr 14 22:39:03 2016
Le spécificateur %c
produit le même format que ctime
.
L'un des avantages de cette fonction est qu'elle renvoie le nombre d'octets écrits, ce qui permet un meilleur contrôle des erreurs si la chaîne générée est trop longue.
asctime
et ctime
(C89)
asctime
est un moyen pratique de formater un struct tm
:
principal c
#include <stdio.h>
#include <time.h>
int main(void) {
time_t t = time(NULL);
struct tm *tm = localtime(&t);
printf("%s", asctime(tm));
return 0;
}
Exemple de sortie:
Wed Jun 10 16:10:32 2015
Et il y a aussi ctime()
qui, selon la norme, est un raccourci pour:
asctime(localtime())
Comme mentionné par par Jonathan Leffler , le format présente l'inconvénient de ne pas avoir d'informations de fuseau horaire.
POSIX 7 a marqué ces fonctions comme "obsolètes" afin de pouvoir les supprimer dans les versions futures:
Les développeurs standard ont décidé de marquer les fonctions asctime () et asctime_r () comme obsolètes même si asctime () est dans la norme ISO C en raison du risque de débordement de la mémoire tampon. La norme ISO C fournit également la fonction strftime () qui peut être utilisée pour éviter ces problèmes.
Version C++ de cette question: Comment obtenir l'heure et la date actuelles en C++?
Testé sous Ubuntu 16.04.
Les réponses données ci-dessus sont de bonnes réponses CRT, mais si vous le souhaitez, vous pouvez également utiliser la solution Win32. C'est presque identique, mais IMO si vous programmez pour Windows, vous pouvez aussi bien utiliser son API (dunno si vous programmez dans Windows mais quoi que ce soit)
char* arrDayNames[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // Jeez I hope this works, I haven't done this in ages and it's hard without a compiler..
SYSTEMTIME st;
GetLocalTime(&st); // Alternatively use GetSystemTime for the UTC version of the time
printf("The current date and time are: %d/%d/%d %d:%d:%d:%d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
printf("The day is: %s", arrDayNames[st.wDayOfWeek]);
Quoi qu'il en soit, ceci est votre solution Windows. J'espère que ça vous aidera un jour!
Timespec a le jour de l'année intégré.
http://pubs.opengroup.org/onlinepubs/7908799/xsh/time.h.html
#include <time.h>
int get_day_of_year(){
time_t t = time(NULL);
struct tm tm = *localtime(&t);
return tm.tm_yday;
}`
Vous pouvez utiliser le WinAPI pour obtenir la date et l’heure, cette méthode est spécifique à Windows, mais si vous ne ciblez que Windows, ou utilisez déjà WinAPI, c’est une possibilité.1:
Vous pouvez obtenir l’heure et la date à l’aide de SYSTEMTIME
struct
. Vous devez également appeler l’une des deux fonctions (GetLocalTime()
ou GetSystemTime()
) pour renseigner le struct.
GetLocalTime()
vous donnera l'heure et la date spécifique à votre fuseau horaire.
GetSystemTime()
vous donnera l'heure et la date in UTC.
La SYSTEMTIME
struct
a les membres suivants:
wYear
, wMonth
, wDayOfWeek
, wDay
, wHour
, wMinute
, wSecond
et wMilliseconds
Vous devez ensuite simplement accéder à la struct de la manière habituelle
Exemple de code actuel:
#include <windows.h> // use to define SYSTEMTIME , GetLocalTime() and GetSystemTime()
#include <stdio.h> // For printf() (could otherwise use WinAPI equivalent)
int main(void) { // Or any other WinAPI entry point (e.g. WinMain/wmain)
SYSTEMTIME t; // Declare SYSTEMTIME struct
GetLocalTime(&t); // Fill out the struct so that it can be used
// Use GetSystemTime(&t) to get UTC time
printf("Year: %d, Month: %d, Day: %d, Hour: %d, Minute:%d, Second: %d, Millisecond: %d", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds); // Return year, month, day, hour, minute, second and millisecond in that order
return 0;
}
(Codé pour la simplicité et la clarté, voir la réponse originale pour une méthode mieux formatée )
La sortie sera quelque chose comme ça:
Year: 2018, Month: 11, Day: 24, Hour: 12, Minute:28, Second: 1, Millisecond: 572
Références utiles:
Toute la documentation WinAPI (la plupart déjà listée ci-dessus):
Un très bon tutoriel pour débutants à ce sujet par Zetcode:
Opérations simples avec date/heure sur Codeproject:
1: Comme indiqué dans les commentaires de la réponse de Ori Osherov ("Given that OP started with date +%F, they're almost certainly not using Windows. – melpomene Sep 9 at 22:17
"), l'OP utilise pas sous Windows. Toutefois, cette question ne comportant aucune balise spécifique à la plate-forme ce système particulier), et est l’un des meilleurs résultats lorsque Googling "get time in c" (les deux réponses appartiennent ici), certains utilisateurs recherchant une réponse à cette question peuvent se trouver sur Windows et leur seront donc utiles.