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

Algorithmes et structures de données Discussion :

Date a partir d'un stamp


Sujet :

Algorithmes et structures de données

  1. #1
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut Date a partir d'un stamp
    Bonjour,

    Voila je cherche a déterminer une date, ou un écart de date a partir d'un datestamp.

    Donc déjà pour déterminer une date, celle du jour par exemple, je récupère le stamp (en C++) et je fait ceci:
    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
     
    //Donc on part du 1 1 1970 (Obligé c'est comme ça que le système donne le stamp
    Jour = 1, Mois = 1, Annee = 1970
     
    //On rajoute au jour le nombre de jour du stamp
    Jour = Jour + (stamp/86400)
     
    //Ensuite on construit une date valide
    TANT QUE Mois > 12 OU Jour > NbrJoursMois(Mois, Annee)
    DEBUT
     
        SI Mois > 12 ALORS
            Annee = Annee + (Mois / 12)
            Mois = (Mois % 12 ? Mois % 12 : 1)
        FIN
     
        SI Jour > NbrJoursMois(Mois, Annee) ALORS
            Jour = Jour - NbrJoursMois(Mois, Annee)
            Mois = Mois + 1
        FIN
     
    FIN
    Alors déjà que pensez vous de cet algo?
    On fait en gros 450 passage pour calculer la date d'aujourd'hui a partir de ça, est ce raisonnable?

    Et ensuite, et c'est la que j'ai mon soucis, c'est pour calculer l'écart entre deux dates.
    Pour le moment je fais comme ceci:
    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
     
    //Je calcul 2 stamps
    Jour1 = 2, Mois1 = 6 , Annee1 = 2007
    Jour2 = 2, Mois2 = 6 , Annee2 = 2008
     
    SI Mois1 <= 2 ALORS
            Annee1 = Anne1 - 1
            Mois1 = Mois1 + 13
    SINON
            Mois1 = Mois1 + 1
    FIN
     
    Stamp1 = ((1461 * Annee1) / 4) + ((153 * Mois1) / 5) + Jour1
     
    SI Mois2 <= 2 ALORS
            Annee2 = Anne2 - 1
            Mois2 = Mois2 + 13
    SINON
            Mois2 = Mois2 + 1
    FIN
     
    Stamp2 = ((1461 * Annee2) / 4) + ((153 * Mois2) / 5) + Jour2
     
    //On fait la difference des stamps et on prend la valeur absolue
    DiffStamps = |Stamp2 - Stamp1|
     
    //On calcule le nombre d'années, de mois et de jours
    NbrAnnees = DiffStamps / 365.25
    Reste = DiffStamps % 365.25
     
    NbrMois = Reste / 30
    Reste = Reste % 30
     
    NbrJours = Reste
    Mais avec ceci j'ai un décalage. Ca ne fonctionne pas correctement.
    Et je n'ai pas réussi a déterminer une autre manière.

    Merci pour votre aide
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    si la question est du C ou du C++, ce n'est pas sur le bon forum

    [NOTE : il y a des fonctions toutes faites en C (time() donne en secondes le temps depuis le 1 Janvier 1970, et est valable jusqu'en 2037). Et une fonction mktime() le transforme en annee/mois/jour/heure/minute/seconde)]

    Si maintenant la question est algorithmique, tu as la réponse dans ce post :


    http://www.developpez.net/forums/sho...d.php?t=260778
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Il y a tout ce qu'il faut dans les bibliothèques standard du C
    Gestion du temps
    Thème: Time management
    Headers: time.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include <time.h>
     
    time_t ltime ;
    struct tm *today;
     
    void main ()
    {	
    _tzset(); // définit le temps local
    time(&ltime);// récupération du temps
    today=localtime(&ltime);
    printf("%d\n",today->tm_hour);
    printf("%d\n",today->tm_min);
    }
    Si vous n'avez pas de montre le programme précédent peut vous donner l'heure.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Et pour la 2ieme partie? La partie durée entre deux dates...
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    eh on va tout te faire...

    Il y a des man pages, des tutoriels, des FAQ...

    Ce qu'on te dit c'est que si c'est en C c'est TRES SIMPLE (en 2 lignes de code).
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Deux lignes de code??? Pour faire la différence entres deux dates?
    Et afficher ca sous la forme nbjour, nbmois, nbannée ?????
    Ben écoute je doit vraiment etre nul alors parce que ca fai deja 2jours que je suis sur l'algo alors si ca se fait en deux lignes tu peut me les donner non?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  7. #7
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Le thème de la différence de dates a déjà été abondamment traité sur ce forum.
    Rechercher les threads correspondants
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  8. #8
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Eu si j'ai posté ce que je n'ai justement rien trouvé de satisfaisant :S
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    t'as pas cherché trop fort....

    http://c.developpez.com/faq/c/?page=date

    http://c.developpez.com/faq/c/?page=...E_soustraction

    Mais fais gaffe à pas nous chercher non plus
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Eu je suis peut être lourd et chiant mais ca j'ai deja lut...
    Et je ne voit toujours pas, pour transformer un stamp en Jours Mois Année...
    Parce que la c'est que des seconde

    Pour resumer, j'ai fait la difference de mes deux stamps, j'arrive a un nombre de jour entres les deux dates.
    Mais la ou je suis bloqué c'est pour transformer ce nombre de jours en Jours, Mois, Années.
    J'ai toujours un décalage dans les jours a cause des mois 31, et j'arrive pas a gérer ca.
    Donc si vous aviez une solution, Merci.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    je ne te suis pas....

    Mais 24h font 86400 secondes...

    Donc tu prends la différence entre tes 2 stamps, tu divises par 86400, et tu obtiens le nombre de jours...

    Si tu veux obtenir une différence en termes de années/mois/jour, il te faudra prendre des hypothèses qui ne seront pas valides toujours...

    C'est là que je ne suis plus...

    Soit tu veux avoir date de début et date de fin en termes de années/mois/jour, et là les fonctions comme on a dit sont toutes prêtes.

    Soit tu veux avoir la différence, et ça n'a aucun sens : c'est une différence... Il te faudrait définir une notion de "mois moyen" , "d'année moyenne"... Je vois pas l'intérêt.... Le plus véritable dont tu puisses t'approcher c'est le nombre de jours...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Non c'est bon j'ai reussi... J'ai trouvé comment transformé une différence de deux dates en jours au depart en jours mois années, et ca sans faire de moyenne.
    J'obtient exactement le nombre de jour!
    Bon je ne vous dit pas merci parce que bon...
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cerede2000
    Non c'est bon j'ai reussi... J'ai trouvé comment transformé une différence de deux dates en jours au depart en jours mois années, et ca sans faire de moyenne.
    J'obtient exactement le nombre de jour!
    Bon je ne vous dit pas merci parce que bon...
    j'aimerais bien que tu nous montres ta solution..

    parce que si tu as gardé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NbrAnnees = DiffStamps / 365.25
    Reste = DiffStamps % 365.25
     
    NbrMois = Reste / 30
    Reste = Reste % 30
    ça prend bien une année moyenne et un mois moyen...

    Et pour le merci, c'est sûr, ça vaut pas la peine
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  14. #14
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Non je n'ai pas gardé cela, car il est évident que ca ne pouvait pas fonctionné
    Les mois en 31 posait problèmes.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

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

Discussions similaires

  1. Recuperer les max des dates à partir d'une autre table
    Par inabil dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/11/2006, 15h19
  2. Réponses: 3
    Dernier message: 30/05/2006, 21h28
  3. Date a partir des millisecondes
    Par crazydede8 dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2006, 16h42
  4. Avoir la date à partir de nombre bjour
    Par devdev2003 dans le forum Linux
    Réponses: 5
    Dernier message: 04/12/2005, 15h26
  5. Recuerer la date a partir du nombre de jour
    Par devdev2003 dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2005, 16h44

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