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 :

Formater un timestamp


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut Formater un timestamp
    Bonjour,

    Après avoir lu et relu la FAQ je n'ai pas réussi a trouver la solution à mon problème.
    En fait je récupère un timestamp sous forme d'un int et je voudrais pouvoir le formater à ma guise seulement, toutes les fonction de time.h manipule des time_t. Alors il y a surement une subtilité que je n'ai pas compris. Quelqu'un pourrait-il m'éclairer svp

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    J'ai trouvé ça sur Wikipedia :
    La norme C spécifie que le type type_t est arithmétique, mais que son encodage n'est pas spécifié, ce qui rend ce type pratiquement opaque. Le standard POSIX spécifie que time_t contient le nombre de secondes depuis le 1er janvier 1970 (heure UNIX).
    (le gars qui a écrit a voulu écrire time_t et non type_t ).

    Par quelle fonction obtiens-tu un entier ? Si tu veux formater ton timestamp via une fonction standard il serait préférable de rester cohérent en lui faisant manipuler un type du standard, i.e. time_t, car à cause de son opacité tu risques d'avoir des surprises.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut
    Par quelle fonction obtiens-tu un entier ?
    En gros je récupère un guint16 dans une trame réseau, et je sais que c'est le nombre de seconde depuis le 01/01/1970 (donc un timestamp?). Je voudrais pouvoir l'afficher comme tel : dd/mm/yy hh:mm:ss

    Edit: j'ai continué mes recherches, et je tiens a préciser que le problème ne vient pas de l'affichage, mais de la "transformation" de mon guint16 en time_t

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    je sais que c'est le nombre de seconde depuis le 01/01/1970 (donc un timestamp?). Je voudrais pouvoir l'afficher comme tel : dd/mm/yy hh:mm:ss
    strftime peut faire ton bonheur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* ton timestamp */
    time_t timestamp = ... (nb sec depuis 1/1/1970);
    /* conversion en structure tm */
    struct tm * tm = localtime(&timestamp);
    /* mémoire pour stocker le résultat */
    char buffer[256];
    /* formatage de la date */
    strftime(buffer, sizeof buffer, "%d/%m/%y %H:%M:%S", tm);
     
    printf(buffer);
    En gros je récupère un guint16 dans une trame réseau, et
    Attention, un entier non-signé sur 16 bits ne te permettra par de dépasser le 2 janvier 1970 (limité à 2^16 secondes, soit 18 heures)
    Dernière modification par Invité(e) ; 15/10/2010 à 14h40. Motif: %h --> %H

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut
    Mea culpa, c'est un entier sur 32 bits que je récupère
    Je n'ai aucun problème à la compilation, par contre quand je lance mon wireshark (je code des dissecteurs) il crash direct.
    N'y a-t-il pas une autre solution? (Je ne sais pas pourquoi mais je pense que c'est le fait d'utiliser un tableau de char)

    Edit: après quelques tests, c'est bien la ligne strftime qui fait planter mon appli

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Alwik Voir le message
    Mea culpa, c'est un entier sur 32 bits que je récupère
    Je n'ai aucun problème à la compilation, par contre quand je lance mon wireshark (je code des dissecteurs) il crash direct.
    Ajoute des traces dans le programme pour bien voir ce qui pose problème (ou utilises un débogueur)

    Citation Envoyé par Alwik Voir le message
    N'y a-t-il pas une autre solution? (Je ne sais pas pourquoi mais je pense que c'est le fait d'utiliser un tableau de char)
    localtime n'est pas thread-safe. Tu peux peut être essayer de remplacer par localtime_r.

    le code deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct tm tm;
    localtime_r(&timestamp, &tm);
    /* formatage de la date */
    strftime(buffer, sizeof buffer, "%d/%m/%y %H:%M:%S", &tm);
    Sinon, peux tu poster le code qui crashe ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 24
    Par défaut
    Malheureusement on peut ajouter des masses de traces dans le programme.
    Finalement après avoir bien fouillé dans mon code, j'ai remarqué d'autres erreurs, donc ta première solution marchait très bien.
    Merci beaucoup!

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

Discussions similaires

  1. [XSLT 1.0] Formater un timestamp
    Par progcyb dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/01/2013, 09h43
  2. Format date timestamp
    Par tidou95220 dans le forum SAS Base
    Réponses: 4
    Dernier message: 04/01/2013, 12h15
  3. [MySQL] format de timestamp et affichage
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 31/03/2008, 19h09
  4. Formater un Timestamp ?
    Par ghohm dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2007, 15h00
  5. [Conception] FireBird et format de TimeStamp
    Par Bruno@Chrysis dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/06/2006, 08h52

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