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 :

Utilisation de mktime: problème d'heure d'été et hiver


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Par défaut Utilisation de mktime: problème d'heure d'été et hiver
    bonjour,

    dans un prog C que j'ai fait, je manipule des dates sous forme time_t et struct tm. Je me suis pas mal renseigné sur toutes les fonctions qui les manipulent et sur les particularités de ces structures, mais j'ai toujours un problème. Jusqu'à maintenant, mon prog fonctionnait très bien, mais depuis le changement d'heure, il marche plus, et depuis je cherche à résoudre le problème sans succès.

    Pourtant, les opérations que j'effectue peuvent se résumer à ça:

    * je rentre à la main une date, et applique les corrections nécessaire pour en faire un objet struct tm (mois-1, année-1900, des trucs comme ça).
    * J'en fais un objet de type time_t avec mktime
    * Je l'affiche avec ctime

    --> si la date est dans le créneau "été", ça marche, la date affichée est la bonne, si elle est en hiver, la date possède une heure de moins que ce que je voulais. Je pensais que le paramètre tm_isdst de struct tm arrangerait le problème, mais que neni, ça enlève au contraire une heure à tout le monde.

    En fait, je fais tout ça pour pouvoir faire un diff entre la date entrée et la date local récupérée avec la fonction time, donc il me faudrait pouvoir être sûr de mettre ces deux dates au même format, GMT ou local peu importe puisque je fais un diff, histoire d'avoir quelque chose qui marche hiver comme été. Je n'ai toujours pas trouvé comment faire.

    Si vous avez une idée, je suis preneur...

    merci !

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Tu peux construire tes struct tm avec gmtime au lieu de localtime, ça te retournera la date gmt
    Pour la date saisie, il faut se mettre d'accord si c'est une date gmt où une date locale.
    Si c'est un date locale : conversion en timestamp avec mktime (sans toucher à isdst) puis reconversion en struct tm avec gmtime

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Par défaut
    salut,

    Je n'utilise ni localtime ni gmtime, puisque je n'effectue aucune conversion time_t --> struct tm: ma comparaison entre la date que je rentre et la date système se faisant avec diff, donc sur des objets time_t.

    Je rentre la date à la main (en heure local donc), et je l'injecte direct dans les variables de mon objet struct tm. Tout le problème réside donc dans la conversion de cet objet struct tm --> time_t pour la comparaison finale. J'utilise pour cela mktime, avec isdst à 0, et j'ai le problème dont je parle dans mon premier post: si la date que j'entre est en hiver (par ex le 25 dec), alors, après application de mktime, j'obtient 25 dec mais l'heure possède une heure de moins. Si la date est en été (17 juillet), alors, après application de mktime, j'obtient une date cohérente...

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ah oki,
    Dans ce cas là, si tu n'as pas besoin de l'heure (juste de la date), en general j'initialise l'heure à autre chose que minuit (genre 6h du mat), comme ça ya plus de probleme de changement d'heure

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Par défaut
    oh que si je me sers de l'heure, quand je dis date c'est pour dire date + heure+min+sec et tout et tout
    C'est bien pour ça que mon problème d'heure m'embete, sinon je m'en soucierais pas !

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ah ok ,)
    Au pire mktime -> gmtime -> mktime ?
    Je sais pas

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/02/2013, 17h29
  2. Utilisation de mktime
    Par D[r]eadLock dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h15
  3. Réponses: 1
    Dernier message: 01/06/2010, 11h40
  4. Réponses: 11
    Dernier message: 24/07/2007, 15h14
  5. Réponses: 1
    Dernier message: 12/04/2005, 20h36

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