IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[C++ - MFC] numéro de la semaine en cours...?


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut [C++ - MFC] numéro de la semaine en cours...?
    Bonjour, je cherche à trouver le numéro actuel de la semaine, pour cela, la fonction mktime (time.h) permet d'obtenir un timer d'une date quelconque, une semaine c'est 7 jours soit 7*24*60*60 secondes :
    Voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	struct tm ourRef;
    	struct tm theDate;
     
    	ourRef.tm_sec = 0;
    	ourRef.tm_min = 0;
    	ourRef.tm_hour = 0;
    	ourRef.tm_mday = 1;
    	ourRef.tm_mon = 0; //Janvier est 0
    	ourRef.tm_year = date.GetYear()-1900; //years since 1900
     
       theDate.tm_sec = date.GetSecond();
    	theDate.tm_min = date.GetMinute();
    	theDate.tm_hour = date.GetHour();
    	theDate.tm_mday = date.GetDay();
    	theDate.tm_mon = date.GetMonth();
    	theDate.tm_year = date.GetYear()-1900; //years since 1900
     
    	int semaine=(mktime(theDate)-mktime(ourRef))/(7*24*60*60);
    Je ne suis pas un pro en mktime.... le compilateur VC7 me sort : error C2664: 'mktime' : impossible de convertir le paramètre 1 de 'tm' en 'tm *'
    Je comprend po bien
    Qq1 peut m'aider à finir cette fonction?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Celà veut simplement dir qu'il veut un pointeur sur un struct tm, tu n'as qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int semaine=(mktime(&theDate)-mktime(&ourRef))/(7*24*60*60);
    Pour plus d'explications, cours et tutoriels pour apprendre C++ et cours et tutoriels pour apprendre langage C
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    avec COleDateTime::GetDayOfYear ca te retourne le nombre de jour ecoulé dans l'année configurer.

    1 janvier => 1
    2 janvier => 2
    etc ...

    en divisant ce chiffre par 7 tu as le numéro de semaine -1
    il y a du linge sur la corde à linge

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    hum, c'est plus compliqué que ça pour avoir le numéro de la semaine en cours, j'ai un copain qui l'a fait. Si j'y pense, demain je t'envoie l'algo (pas de code ...)

    Je l'ai pas chez moi, mais au boulot ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Trap D
    Salut
    Celà veut simplement dir qu'il veut un pointeur sur un struct tm, tu n'as qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int semaine=(mktime(&theDate)-mktime(&ourRef))/(7*24*60*60);
    Ok, merci, c'est ce que j'ai fais et ca marche presque, car que je trouve semaine 50 alors qu'on est en semaine 47...

    Citation Envoyé par la drogue c'est mal
    avec COleDateTime::GetDayOfYear ca te retourne le nombre de jour ecoulé dans l'année configurer.
    en divisant ce chiffre par 7 tu as le numéro de semaine -1
    Arf, c'est pas assez compliqué pour moi, lol, nan, t'as raison, si j'avais eu cette fonction, je me serais fais moins chier.... et dis moi, pouquoi -1? en fait, c'est le meme principe que moi, sauf que moi c'est en seconde et pas en jours, mais pourquoi je trouve 50, alors?

    Citation Envoyé par Big K.
    hum, c'est plus compliqué que ça pour avoir le numéro de la semaine en cours, j'ai un copain qui l'a fait.
    Ben logiquement si, ca devra marcher

  6. #6
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    Arf, c'est pas assez compliqué pour moi, lol, nan, t'as raison, si j'avais eu cette fonction, je me serais fais moins chier.... et dis moi, pouquoi -1?
    +1 pardon
    il y a du linge sur la corde à linge

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par la drogue c'est mal
    avec COleDateTime::GetDayOfYear ca te retourne le nombre de jour ecoulé dans l'année configurer.
    Arf, c'est quand meme bcp plus simple kom ca!!
    Voila, j'ai essayé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COleDateTime date2=COleDateTime::GetCurrentTime();
    int semaine2=(date2.GetDayOfYear())/(7);
    Citation Envoyé par la drogue c'est mal
    en divisant ce chiffre par 7 tu as le numéro de semaine -1
    il me sort 46, donc j'en déduis que l'on dois faire +1 et non pas -1, nan?

    EDIT : c'est bien ce kil me semblait

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Aller, j'adopte cette solution ki est kan meme bcp moins longue que le mienne, mais si qq1 à une solution pour l'autre, ca m'interesse aussi, j'aimerais bien comprendre.....
    Merci à vous 8)

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Il me semble qu'il y a encore un probleme, car si vous faites
    le calcul pour le lundi de cette semaine, le numero de semaine
    sera different que si vous faites le calcul pour le vendredi.
    Il faut tenir compte du type de jour du 1er janvier car le numero de
    semaine change le lundi.

    Cordialement

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    En effet, je viens de faire les tests.....
    Je v y réfléchir, je vous tiens au courant.
    Si qq1 à une idée?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    C bon, c'est corrigé en ajoutant ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COleDateTime date_janv(date.GetYear(), 0, 1,0,0,0);
    //initialise date_janv au 1er janvier de l'année en cours

    et en remplacant ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int semaine=(date.GetDayOfYear())/(7);
    par ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int semaine=((date.GetDayOfYear()+(date_janv.GetDayOfWeek()))/(7))+1;
    //en soustrait les jours passés de la semaine au 1er janvier
    Voilà!
    Merci à vous tous ;o)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Trouver le numéro de la semaine en cours
    Par apt dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/08/2012, 00h31
  2. [VB.NET] Obtenir le numéro de la semaine d'une date
    Par alain&&thomas dans le forum Windows Forms
    Réponses: 9
    Dernier message: 07/09/2009, 17h54
  3. Numéro de la semaine selon la norme ISO
    Par steelidol dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 02/02/2006, 15h05
  4. Réponses: 1
    Dernier message: 16/09/2005, 14h07
  5. Comment récupérer le numéro de la semaine ?
    Par claude dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2004, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo