108 votes

Comment obtenir les valeurs de date et d'heure dans un programme C ?

J'ai quelque chose comme ceci:

char *current_day, *current_time;
system("date +%F");
system("date +%T");

Il imprime le jour et l'heure actuels dans le stdout, mais je veux obtenir cette sortie ou les affecter aux variables current_day et current_time, afin de pouvoir effectuer un traitement avec ces valeurs plus tard.

current_day ==> jour actuel
current_time ==> heure actuelle

La seule solution à laquelle je peux penser maintenant est de rediriger la sortie vers un fichier, puis de lire le fichier et ensuite d'assigner les valeurs de la date et de l'heure à current_day et current_time. Mais je pense que ce n'est pas une bonne façon de faire. Y a-t-il un autre moyen court et élégant?

1voto

ProfessorBiddle Points 51

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 à cela. C'est presque identique mais à mon avis, si vous programmez pour Windows, vous feriez mieux d'utiliser son API (bien que je ne sache pas si vous programmez sous Windows).

char* arrDayNames[7] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
SYSTEMTIME st;
GetLocalTime(&st); // Utilisez alternativement GetSystemTime pour la version UTC du temps
printf("La date et l'heure actuelles sont : %d/%d/%d %d:%d:%d:%d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
printf("Le jour est : %s", arrDayNames[st.wDayOfWeek]);

Quoi qu'il en soit, ceci est une solution Windows. J'espère qu'elle vous sera utile un jour!

0voto

OSaad Points 410

Au lieu de fichiers utiliser des pipes et si tu veux utiliser C et pas C++ tu peux utiliser popen comme ceci

#include
#include

FILE *fp= popen("date +F","r");

et utiliser *fp comme un pointeur de fichier normal avec fgets et tout

si tu veux utiliser des chaînes de caractères en c++, crée un enfant, invoque la commande et ensuite la redirige vers le parent.

   #include 
   #include 
   #include 
   using namespace std;

   string currentday;
   int dependPipe[2];

   pipe(dependPipe);// créer le pipe

   if(fork()){//parent
           dup2(dependPipe[0],0);//convertir l'entrée standard du parent en sortie du pipe
           close(dependPipe[1]);
           getline(cin,currentday);

    } else {//enfant
        dup2(dependPipe[1],1);//convertir la sortie standard de l'enfant en entrée du pipe
        close(dependPipe[0]);

        system("date +%F");
    }

// fais une chose similaire pour date +T mais je te recommande vraiment de rester avec les fonctions de time.h GL

0voto

Satish Azad Points 1383

Vous pouvez obtenir la date actuelle et l'heure en utilisant des macros prédéfinies en C, comme
DATE TIME vous pouvez également trouver la date actuelle d'une autre manière. c-forbeginners.blogspot.in pour plus de détails

0voto

Sam Budda Points 3446

J'utilisais un compilateur C en ligne de commande pour compiler ces fichiers et cela m'a complètement rendu fou car il refusait de compiler.

Pour une raison quelconque, mon compilateur détestait que je déclare et utilise la fonction en une seule ligne.

struct tm tm = *localtime(&t);

test.c
test.c(494) : error C2143: syntax error : missing ';' before 'type'
Compiler Status: 512

Déclarez d'abord votre variable, puis appelez la fonction. C'est ainsi que je l'ai fait.

char   todayDateStr[100];
time_t rawtime;
struct tm *timeinfo;

time ( &rawtime );
timeinfo = localtime ( &rawtime );
strftime(todayDateStr, strlen("DD-MMM-YYYY HH:MM")+1,"%d-%b-%Y %H:%M",timeinfo);
printf("todayDateStr = %s ... \n", todayDateStr );

0voto

dubovac Points 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct date
{
    int month;
    int day;
    int year;
};

int calcN(struct date d)
{
    int N;
    int f(struct date d);
    int g(int m);

    N = 1461 * f(d) / 4 + 153 * g(d.month) / 5 + d.day;

    if(d.year < 1700 || (d.year == 1700 && d.month < 3))
    {
        printf("La date doit être postérieure au 29 février 1700\n");

        return 0;
    }
    else if(d.year < 1800 || (d.year == 1800 && d.month < 3))
        N += 2;
    else if(d.year < 1900 || (d.year == 1900 && d.month < 3))
        N += 1;    

    return N;
}

int f(struct date d)
{
    if(d.month <= 2)
        d.year -= 1;

    return d.year;
}

int g(int m)
{
    if(m <=2)
        m += 13;
    else
        m += 1;

    return m;
}

int main(void)
{
    int calcN(struct date d);
    struct date d1, d2;
    int N1, N2;
    time_t t;

    time(&t);
    struct tm *now = localtime(&t);

    d1.month = now->tm_mon + 1;
    d1.day = now->tm_mday;
    d1.year = now->tm_year + 1900;

    printf("Date d'aujourd'hui : %02i/%02i/%i\n", d1.month, d1.day, d1.year);

    N1 = calcN(d1);

    printf("Entrez la date de naissance (mm jj aaaa) : ");
    scanf("%i%i%i", &d2.month, &d2.day, &d2.year);

    N2 = calcN(d2);

    if(N2 == 0)
        return 0;

    printf("Nombre de jours écoulés depuis la naissance : %i\n", N1 - N2);

    return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X