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

GTK+ avec C & C++ Discussion :

mon calendrier ne passe pas 2039


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut mon calendrier ne passe pas 2039
    Bonjour
    j'ai fait un calendrier (on peut télécharger le zip ici http://cogiter.info/images/calendrier.zip)
    J'aimerais savoir pourquoi il ne passe pas l'année 2039. Il revient à l'année 1970 c'est à dire à 0?
    Voici le boutde code ou les années son incrémentées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        if (p_Bouton==p_gadget->calend.Bouton[3])
            {
               (tps->tm_year)++;
               p_gadget->calend.tCalend=mktime(tps);
               actualiserCalend (p_gadget);
            }
    Merci !

    Edité : j'oublie de dire que le zip, c'est le calendrier pour linux pas pour windows.

  2. #2
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut
    ça fait deux messages que je poste et pratiquement personne ne répond, j'ai fait un truc qui fallait pas ? En tout cas vu d'ici je dirais bizarre bizarre, mais c'est peut être une tite parano naissante

    Bon pour mon soucis, si ça peut servir à qq'un, je viens de me rendre compte que ça ne doit pas être un problème de GTK+ mais plutôt de C. Pour le 19 janvier 2038 p_gadget->tCalend devient négatif.

    time_t doit être limité ou un truc comme ça... je poursuis mes recherches mais de l'aide serait tjrs la bienvenue.

    Ah ben voilà, j'ai fait un sizeof(time_t), et je me rends compte que c'est comme un int en définitive (32bits). Donc un int c'est compris entre -2 147 483 648 et 2 147 483 647 et on atteint 2 147 483 647 le mardi 19 janvier 2038 à 04H14'07''

    Voilà maintenant il reste à trouver une solution pour aller plus loin.

    Bon j'ai trouvé un ersatz de solution : comme 1982 ressemble à 2038 (nombre paire mais pas bissextile) quand l'année passe à 2038 je reviens à 1982 et j'ai ajouté une variable dans ma structure que j'utiliserai pour corriger l'année. ça donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        if (p_Bouton==p_gadget->Bouton[3])
            {
     
               (tps->tm_year)++;
               if(tps->tm_year==138)
               {
               tps->tm_year=82;
               p_gadget->bug38 = 56;
               }
               p_gadget->tCalend=mktime(tps);
               actualiserCalend (p_gadget);
            }
    Dans la fonction "actualiserCalend" pour transformer l'année en chaîne de caractères j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(texte,"%ld",(tps->tm_year+1900+p_gadget->bug38));
    Pour le bouton retour on fait l'inverse..
    On peut aussi ne pas utiliser time-t ...

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Pourquoi ne pas utilisez GtkCalendar ?

    Je suis sous Windows donc sans un minimum de code il est difficile de répondre à ta question

  4. #4
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut
    Citation Envoyé par gege2061
    Pourquoi ne pas utilisez GtkCalendar ?

    Je suis sous Windows donc sans un minimum de code il est difficile de répondre à ta question
    Pourquoi ne pas utiliser GtkCalendar ? Parce que je ne savais pas que ça existait !
    Bon je vais voir ça... c'est en se trompant qu'on apprend à ce qu'il paraît, ..moi j'apprends vite !

    Merci pour la réponse.

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    c'est tout a fait normal

    le calendrier n'est exploitable que de 1970 a 2039 parce que les appels calendaires en C font appels a des ressources systemes et bios et ni l'un ni l'autre ne peut depasser ses dates...
    C'est hardware tu ne peux pas y faire quoi que ce soit hormis ajouter a ton code le calcul specifique aux dates au dela (et en deca) de ces deux limites.

    en clair pour depasser ces limites il faut ecrire une couche calendaire integrallement software sans aucun appel au horloges hardware ni au bios ni au system mais integrallement calculees par ton programme lui meme integralement.

    la commande cal par exemple fonctionne sur ce principe.

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Par défaut BOgue de l'an 2038
    Je pense que ton erreur est tout simplement dûe à ca,

    http://fr.wikipedia.org/wiki/Bogue_de_l'an_2038

    Il y a forcement un lien , sinon la coincidence me parait trop enorme

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/05/2012, 18h03
  2. mon flash ne passe pas avec W3C
    Par jlb59 dans le forum Flash
    Réponses: 2
    Dernier message: 09/11/2008, 22h44
  3. [Tableaux] PB mon IF ne passe pas pourquoi ?
    Par foxdream94 dans le forum Langage
    Réponses: 10
    Dernier message: 06/06/2007, 12h00
  4. Réponses: 2
    Dernier message: 31/07/2006, 08h48
  5. [RegEx] mon motif de regex ne passe pas
    Par hansaplast dans le forum Langage
    Réponses: 31
    Dernier message: 19/10/2005, 11h20

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