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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 38
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    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

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    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 : 38
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Et pour la 2ieme partie? La partie durée entre deux dates...

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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).

  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 : 38
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    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?

+ 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