Forum Clubic

[C]Trouver le lundi d'une semaine

Bon voilà,

Je cherche à trouver la date du lundi pour une semaine donnée et une année donnée.

Le tout fait en pur C, oui dans un autre langage j’aurai déjà trouvé.

Etant donné que mon C est très très rouillé… et que je ne peux me tourner vers autre chose, je fais appel à votre aide chers clubiciens :slight_smile:

Merci pour votre aide


#include <stdio.h>
#include <time.h>

int DATE_getDay(struct tm * cur_time, char * day)
{
  
    if (mktime(cur_time) == -1)
        return 0;
    else {
        (void)strftime(day, 16, "%A", cur_time);
        return 1;
    }
    
    return 0;
}

int main(void)
{
struct tm time_str;
char daybuf[20];
    
    time_str.tm_year = 2006 - 1900;
    time_str.tm_mon = 9 - 1;
    time_str.tm_mday = 8;
    time_str.tm_hour = 0;
    time_str.tm_min = 0;
    time_str.tm_sec = 1;
    time_str.tm_isdst = -1;
    DATE_getDay(&time_str,daybuf);
    printf("jour = %s\n",daybuf);

    getch();
    
    return 0;
}

Fait rapido, test de ce jour (doit afficher vendredi).

OK, merci KarlKox pour ton aide

Mais je pense pas que ça réponde à ma problématique, donc je vais mieux décrire mon problème.

Voilà la seule information que je connaisse c’est le numéro de semaine de mon année.
Donc à partir de là je cherche à retrouver la date du lundi jj/mm/yyyy de cette semaine.

un petit exemple :

donc la semaine 2 de cette année me retourne le 09/01/2006


#include <stdio.h>
#include <time.h>


int DATE_getWeek(struct tm * cur_time, char * week)
{
  
    if (mktime(cur_time) == -1)
        return 0;
    else {
         (void)strftime(week, 8, "%W", cur_time);         
        return 1;
    }
    
    return 0;
}

int DATE_getDay(struct tm * cur_time, char * day)
{
  
    if (mktime(cur_time) == -1)
        return 0;
    else {      
        (void)strftime(day, 32, "%A %d %B %Y", cur_time);
        return 1;
    }
    
    return 0;
}


int main(void)
{
struct tm time_str;
char daybuf[32];
char weekbuf[8];
int semaine, mois, jour;
int found;    

    semaine = 36;
    mois = (semaine/4);
    if (mois <= 0)
       mois = 1;
           
    jour = 1;
    found = 0;   
    while (!found)
    {
      time_str.tm_year = 2006 - 1900;
      time_str.tm_mon = mois - 1;
      time_str.tm_mday = jour;
      time_str.tm_hour = 0;
      time_str.tm_min = 0;
      time_str.tm_sec = 1;
      time_str.tm_isdst = -1;

      DATE_getWeek(&time_str,weekbuf);
      if (atoi(weekbuf) == semaine)
      {
        while (1)
        {
           DATE_getDay(&time_str,daybuf); 
           if (strstr(daybuf,"Monday"))
           {
              found = 1;
              break;
           }
           jour++;
        }
      } 
      jour++;
        
    } 
    printf("jour = %s\n",daybuf);

    getch();
    
    return 0;
}

C’est crade mais ça fonctionne :ane:

Merci pour ton aide précieuse karlkox,

j’ai testé même si c’est crade, le principale c’est que ça marche, je vais tout de même essayer d’optimiser. L’idée est là, encore merci :slight_smile: