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 :

Date heure : Nombre supérieur à un format int64_t quel format utilisé ?


Sujet :

C++

  1. #1
    Futur Membre du Club Avatar de IlGi256
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2020
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Date heure : Nombre supérieur à un format int64_t quel format utilisé ?
    Bonjour,

    J'ai un problème de format de sortie d'une date heure qui contient maintenant des nano - secondes au lieu des millisecondes.

    Pour une date normale avec des millisecondes contenues dans un format string, j'utilisait le format int64_t avec la fonction de conversion _atoi64().

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /*...*/
     
    string S_DateHeure{};
    int64  I64_DateHeure{};
     
    /*Initialisation d'une date heure en milliseconde*/
    S_Date_Heure = "20220907121659001";
     
    /*Conversion en format int64_t de la date heure en format string*/
    I64_Date_Heure = _atoi64(S_Date_Heure.c_str());
    Maintenant la date heure contient des nano secondes ce qui fait plus de 17 chiffres (20 chiffres).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    string S_DateHeure{};
    int64  I64_DateHeure{};
     
    /*Initialisation d'une date heure avec des nano-seconde*/
    S_Date_Heure = "20220907125250000005";
     
    /*Conversion en format int64_t de la date heure en format string*/
    I64_Date_Heure = _atoi64(S_Date_Heure.c_str());
     
    /*
      J'obtiens un chiffre : 9223372036854775807 au lieu 20220907125250000005
    */
    Après des recherches, on me dit d'utiliser le format int128_t.
    Sauf que mon compilateur C++ ne contient pas cette librairie et donc ne reconnait pas les int128_t même en le mettant à jour !

    - Existe t il un format plus long que le int64_t ?
    - Si oui pouvez vous me donner sa fonction de convertion d'un format string en ce format ?

    Merci !!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Il n'y a pas de type 128bits officiel. Certains compilateurs en proposent un, VS il me semble en a un, mais c'est tout.
    Pourquoi t'embêter avec des nanosecondes ?
    As-tu vraiment besoin de cette précision ?
    Pourquoi ne pas juste tronquer la partie nanoseconde puis travailler avec des millisecondes ?
    Voire des secondes ?
    Si tu veux tu peux toujours stocker le reste à côté.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 330
    Points : 4 151
    Points
    4 151
    Par défaut Au temps, autant
    Bonjour,

    Il y a certainement une confusion classique entre précision et exactitude.

    Combien de temps pour récupérer l'heure puis la convertir de string en entier. Quelques centaines de nanosecondes, plus ?

    L'objectif est seulement de gagner de la place avec la même lisibilité (relative) ? 8 caractères au lieu de 21 ? En passant à 128 bits le gain serait faible 16 vs 21 octets. 21 est un minorant de la longueur de la chaîne.

    Je crois qu'il faut bien fixer l'objectif.

    Si c'est vraiment nécessaire, j'aurais tendance à mettre la partie date dans un int32_t et la partie heure dans un int64_t. 12 octets au lieu de 21.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1

  5. #5
    Futur Membre du Club Avatar de IlGi256
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2020
    Messages : 6
    Points : 5
    Points
    5
    Par défaut reponse
    J'ai pas eu le choix.
    J'ai du découper la date heure en 2.
    Une variable pour qui contiendra la date et l'autre qui contiendra l'horaire.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Au passage, c'est rare ça, une horloge qui inclut les nanosecondes.
    Sous Windows par exemple, la précision maximale mesurable par le système est le dixième de microseconde (l'unité de FILETIME).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/01/2017, 09h51
  2. [XL-2010] convertir date et nombre stockés en format texte
    Par red1974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/05/2016, 18h27
  3. Réponses: 3
    Dernier message: 18/11/2006, 21h44
  4. format date/heure et concaténation
    Par Waluigi dans le forum Access
    Réponses: 3
    Dernier message: 02/06/2006, 11h25
  5. [MySQL] Quel est le meilleur moyen de stocker une date/heure ?
    Par MiJack dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/07/2004, 12h19

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