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

C++ Discussion :

Changer un quantième en date


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Par défaut Changer un quantième en date
    Bonjour bonjour,

    Je cherche à transformer un quantième en date (YYYYMMJJ) , j'ai trituré les fonctions de time.h mais a priori impossible de manipuler une date autre que celle du jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Temps_t=time(NULL);
    Si quelqu'un a une idée a soumettre ...

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Déjà, tu n'auras pas l'année, il faudra la déduire autrement et dire par exemple, c'est l'année en cours ou la forcer à une autre valeur.

    Ce que j'ai ferais dans ce cas, c'est un peu "bestial"
    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
     
    ...
    sinon si quantieme > 31 + 28 + 31  // superieur au 31 mars ?
    alors
       jour = quantieme - (31 + 28 + 31)
       mois = 4
    si quantieme > 28 + 31  // superieur au 28 février ?
    alors
       jour = quantieme - (28 + 31)
       mois = 3
    sinon si jour > 31  // superieur au 31 janvier ?
    alors
       jour = quantieme - 31
       mois = 2
    sinon
       jour = quantieme
       mois = 1
    fin si
    Ce pseudo code doit être modifié pour prendre en compte les années bissextiles
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Tu peux utiliser Boost.Date_Time.

    MAT.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Par défaut
    Merci pour vos réponses.
    EDIT : j'ai fini par me faire un algo si ca peut servir a quelqu'un je le poste ci-dessous :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    char * com::date(char qtc[3],char anno)
    {      
     
     
     
    	  char *date_ret=new char[];
    	  char *tmp=new char[];
    	  int qt,annee;
          int mois=1,jour=0,i=1;//quantième,année,mois,jour
    	  int jm[13];
    	  int j_m=31;
    	  int j_mj=0;
    	  jm[1]=28;jm[2]=31;jm[3]=30;jm[4]=31;
    	  jm[5]=30;jm[6]=31;jm[7]=31;jm[8]=30;//jours par mois
    	  jm[9]=31;jm[10]=30;jm[11]=31;jm[12]='\0';
    	  bool d4=true,d100=true,d400=true,bissextile;
     
     
    	  qt=atoi(qtc);
    	  annee=atoi(&anno);
     
    	   if((annee%4)!=0)d4=false;
    	   if((annee%100)!=0)d100=false;//check les modulos
    	   if ((annee%400)!=0)d400=false;
     
    	   if ((d4&&!d100)||d400)bissextile=true;//bissextile ou pas
           else bissextile=false;
     
    	   if(bissextile==true)jm[0]=29;     
     
     
     for(int j=1;j<12;j++)
     { 
    	 if(qt<=j_m)break;	 
    	 else
    	 {
    	 j_m=j_m+jm[j];
    	 j_mj=j_mj+jm[j];
    	 mois++;
    	 }
     }
     jour=(qt-j_mj);
    sprintf(date_ret,"%d",jour);
    sprintf(tmp,"%d",mois);
    strcat(date_ret,tmp);
    cout<<"date retour !! : "<<date_ret<<endl;
     
     
    return date_ret;
    }
    Si vous avez des suggestions d'améliorations ou autres je suis preneur

  5. #5
    Inactif  
    Inscrit en
    Août 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 74
    Par défaut
    Petite correction il faut faire
    et non pas
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    // retourne la date d'un quantieme passé en entrée
    void CTrtGestionProgrammes::quantiemeToDate(int qt, int annee, int * ret_year,int * ret_month, int * ret_day)
    {
     
    	int mois=1,jour=0;// init mois,jour
            bool d4=true,d100=true,d400=true;
     
    	int jm[13] = {31,28,31,30,31,30,31,31,30,31,30,31}; // nombre de jours des mois
    	int j_m=31;// Nombre de jours du début du mois suivant
    	int j_mj=0;// Nombre de jours des mois précédent
     
     
     
    	// Verification si annee bissextile
    	if((annee%4)!=0)d4=false;
    	if((annee%100)!=0)d100=false;//check les modulos
    	if ((annee%400)!=0)d400=false;
    	if ((d4&&!d100)||d400) jm[1]=29;  // si bissextile fevrier  = 29 jours
     
    	// on compte
    	for(int j=1;((j<12) && (qt>j_m));j++)
    	{
    		j_m=j_m+jm[j];
    		j_mj=j_mj+jm[j-1];
    		mois++;
    	}
    	jour=(qt-j_mj);
     
    	// on retourne la date
    	*ret_year = annee;
    	*ret_month = mois;
    	*ret_day = jour;
     
    }

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Bizarre ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	  bool d4=true,d100=true,d400=true,bissextile;
     
     
    	  qt=atoi(qtc);
    	  annee=atoi(&anno);
     
    	   if((annee%4)!=0)d4=false;
    	   if((annee%100)!=0)d100=false;//check les modulos
    	   if ((annee%400)!=0)d400=false;
     
    	   if ((d4&&!d100)||d400)bissextile=true;//bissextile ou pas
           else bissextile=false;
    Ca serait pas plus simple (et surtout plus slisible) avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        annee=atoi(&anno);
        boolean bissextile = (
                ((annee%400) == 0)  ||
                ( ((annee%4) == 0) && ((annee%100)!=0) )
            );
    De même... j'aurai fait un code plus..... C (et non réentrant) que C++ mais bon:
    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
     
     
    tm  basedate; 
    memset(&basedate,sizeof(basedate),0);
    basedate.tm_year= atoi(anno);
     
    time_t basetime = mktime(&basedate);
     
    time_t wantedtime += (86400 * atoi(qt));
     
    const tm* wanteddate= localtime(&wantedtime );
     
    *result_year = wanteddate->tm_year;
    *result_month = wanteddate->tm_mon;
    *result_day = wanteddate->tm_mday;

Discussions similaires

  1. Comment changer le format de DATE dans Oracle
    Par khanfir dans le forum Oracle
    Réponses: 3
    Dernier message: 20/04/2010, 19h55
  2. changer format d'une date
    Par skanderb dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 30/04/2007, 15h59
  3. [Formule]Quantiéme vers date année/MM/JJ
    Par tieumss dans le forum Excel
    Réponses: 2
    Dernier message: 18/04/2007, 10h53
  4. Changer le format de date en dd/mm/yy
    Par polianita dans le forum Access
    Réponses: 6
    Dernier message: 21/08/2006, 14h26
  5. changer l'ordre des dates dans table
    Par lordyan dans le forum Requêtes
    Réponses: 11
    Dernier message: 14/01/2005, 11h12

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