Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème affichage Date et Heure

    24 mars 2018 à 18:51:11

    Bonjour a tous,

    J'ai un problème d'affichage de la date et de l'heure sous le format JJ/MM/AAAA HH:MM:SS sur une stm32: en fait mon prblème c'est que il me donne la date du 1er janvier 1970 a minuit comment cela se fait-il avec le code suivant ?

        char s_temps[sizeof "JJ/MM/AAAA HH:MM:SS"];
        time_t temps=time(NULL);
        struct tm tm_temps=*localtime(&temps);
    
    
          strftime(s_temps,sizeof s_temps,"%d/%m/%Y %H:%M:%S",&tm_temps);
          lcd.DisplayStringAt(0, LINE(9), (uint8_t *)s_temps, CENTER_MODE);

    je précise que j'ai bien mis le #include <time.h> et que ce n'est pas le code complet car le reste n'a rien a voir avec l'affichage de la date.

    Bonne fin de journée et a bientot.

    Edit- J'ai une hypothèse c'est parce que quelle n'a aucun moyen d'être connecté au réseau sous la configuration actuelle :est-ce le problème ?



    -
    Edité par Danywh 25 mars 2018 à 11:26:08

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2018 à 15:55:29

      Salut,

      La date du 1er Janvier 1970 à minuit correspond à zéro dans le format "timestamp" universel, et ce, quelque soit le langage de programmation.

      Ici, tu fais time_t temps=time(NULL); donc la variable temps vaut zéro, c'est-à-dire le 1er Janvier 1970 à minuit. Pour pallier ce problème, enlève le time(NULL);. Par défaut, lorsque tu déclares une variable de type time_t, elle prend la valeur actuelle de l'horloge du PC. Donc pas besoin de l'initialiser.

      Autre point : à la ligne struct tm tm_temps=*localtime(&temps);, l'étoile est mal placée : struct tm* tm_temps = localtime(&temps);

      -
      Edité par Insonore 26 mars 2018 à 15:59:49

      • Partager sur Facebook
      • Partager sur Twitter
      Hugo
        26 mars 2018 à 18:37:39

        Salut,

        Merci pour ta réponse, j'ai fait comme tu m'as dit et j'ai la date 03/04/1974 a 10:54:37 ce qui signifie que l'horloge de ma stm32 a cette valeur actuellement ?

        PS: Merci pour la correction de la définition j'avais pas fait gaffe en le faisant :)

        -
        Edité par Danywh 26 mars 2018 à 18:38:33

        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2018 à 12:12:13

          J'avais pas vu, il manque une ligne à ton programme (+ y a une petite erreur dans strftime). Essaie avec ça :

          int sizeMax = sizeof("JJ/MM/AAAA HH:MM:SS");    // sizeof(s_temp) ne marche pas vraiment comme il faudrait, donc on enregistre ça à la place pour plus tard
          char s_temps[sizeMax];
          time_t temps;
              
          time(&temps);   // La ligne qu'il manquait, permet de synchroniser le programme avec l'horloge interne
          struct tm* tm_temps = localtime(&temps);
              
          strftime(s_temps, sizeMax, "%d/%m/%Y %H:%M:%S", tm_temps);  // Ici j'ai enlevé le '&' qu'il y avait devant `tm_temps`
          lcd.DisplayStringAt(0, LINE(9), (uint8_t *)s_temps, CENTER_MODE);

          Remarque :

          Faire int sizeMax = sizeof("JJ/MM/AAAA HH:MM:SS"); char s_temps[sizeMax]; ne marche pas avec tous les compilateurs. Un meilleur moyen serait d'utiliser un #define

          -
          Edité par Insonore 27 mars 2018 à 12:37:16

          • Partager sur Facebook
          • Partager sur Twitter
          Hugo
            27 mars 2018 à 12:59:55

            Salut,

            merci de tes réponses. J'avais aussi vu le "&" dans "strftime". Par contre j'ai fait comme tu m'as dit en rajoutant le time(&temps) et cela me refais le problème du 01/01/1970:(. Est-ce que cela est du au fait que mon microcontrôleur n'est pas connecté au réseau?

            (Le compilateur compile bien le 

                int sizemax=sizeof ("JJ/MM/AAAA HH:MM:SS");
                char s_temps[sizemax];


            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2018 à 14:24:13

              Ça vient peut être du microcontrôleur en effet :/ en tout cas, de mon coté, sur PC le code que j'ai donné fonctionne. Et pour le coup je ne sais pas comment régler ton soucis. Tu peux éventuellement créer un nouveau topic pour demander comment savoir si ton microcontrôleur est à la bonne date.

              Bon courage pour la suite o/

              • Partager sur Facebook
              • Partager sur Twitter
              Hugo
                27 mars 2018 à 14:54:45

                Je comprends pas trop l'idée d'avoir l'heure sur un uc, ça n'a pas vraiment de sens. Tu peux développer pourquoi tu en as besoin ?
                • Partager sur Facebook
                • Partager sur Twitter
                  27 mars 2018 à 15:23:18

                  C'est pour un projet de station météo et le fait d'afficher l'heure n'est pas une obligation en soit mais cela permettra d'avoir un projet plus complet. J'affiche les info des capteurs sur l'écran directement intégré au uC.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème affichage Date et Heure

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown