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 :

Convertir un timestamp unix en time_t ?


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    F�vrier 2013
    Messages
    94
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2013
    Messages : 94
    Par d�faut Convertir un timestamp unix en time_t ?
    Bonjour � toutes et � tous,

    Je cherche depuis plusieurs jours sur mon temps libre comment convertir un timestamp unix en type time_t.
    La question semble �tre un classique et j'ai trouv� plein de r�sultats sur mon ami le moteur de recherche, notamment une conversation int�ressante sur ce thread.

    Cependant, apr�s moults essais, je ne trouve pas comment proc�der. Je ne tombe jamais sur la date attendue. En fait je retrouve bien l'horaire et l'horaire exact mais avec 24h (tr�s pr�cis�ment!) de d�calage...

    Voici mon plus r�cent essai:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    unsigned int unix_server_time = ...; //une valeur retournée par le serveur distant
    struct tm timeinfo = {0};
    timeinfo.tm_year = 70;
    timeinfo.tm_sec = (signed long) unix_server_time;
    now = mktime(&timeinfo);
    Le unix_server_time est de type unsigned int (que j'ai chang� en signed long plut�t que de caster � la vol�e, mais le r�sultat est le m�me) et m'est retourn� par un serveur apr�s requ�te, j'ai v�rifi� par un convertisseur en ligne et ce timestamp est correct. Le thread mentionn� indique bien que tm_sec peut g�rer des valeurs >> 60 donc ca devrait fonctionner, mais il me manque encore 1 journ�e... quelqu'un a t'il une id�e d'ou vient de cette diff�rence?

    Merci!

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Si cela se trouve, le serveur avance (ou retarde) tout simplement d'un jour...

    si le d�calage n'avait �t� que de "quelques heures" (dans un sens ou dans un autre), j'aurais en priorit� pens� au fuseau horaire du serveur, mais l�... je ne vois gu�re d'autre possibilit�
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Le timestamp commence � partir du 01/01/1970.
    Donc, j'imagine que 0 seconde donne un 01/01/1970.

    V�rifie donc le r�sultat donn� pour unix_server_time = 0;. Je suis pr�te � parier que tu obtiens un 0/01/1970
    Tu peux aussi tester avec 86400 secondes (le nombre de secondes dans une journ�e)

  4. #4
    Membre confirm�
    Inscrit en
    F�vrier 2013
    Messages
    94
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2013
    Messages : 94
    Par d�faut
    Merci � tous pour vos r�ponse.
    Pour faire �cho � ternel, en faisant on obtient un timestamp qui correspond � Wed, 31 Dec 1969 00:00:00 GMT. Soit bien 24h de retard. Nous sommes donc � une constante pr�t et il me suffit de rajouter 86400 et hop probl�me r�gl�!
    Meri beaucoup pour cette aide!

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Ce code simple fonctionne et retourne ce que j'attends
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    time_t time = 0;
    	tm t;
    	gmtime_s(&t, &time);
    	char buffer[64+1]{ 0 };
    	asctime_s(buffer, 64, &t);
    	std::cout << buffer << std::endl;
    	t.tm_sec = 1;
    	asctime_s(buffer, 64, &t);
    	std::cout << buffer << std::endl;
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Thu Jan  1 00:00:00 1970
    Thu Jan  1 00:00:01 1970
    Je suspecte plut�t que tu as un d�callage horaire quelque part.
    Ou bien que ta machine affiche le "mauvais" jour selon une configuration : 0h00 est vraiment sp�cial, c'est autant la derni�re seconde du jour pr�c�dent que la premi�re du nouveau jour. Si tu veux �tre s�r, affiche 0h00:01, lui c'est le 01/01/1970 sans �quivoque.

    Au passage, le type time_t sert � ce genre de conversion et est plus s�r qu'une manipulation de tm cavali�re.
    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.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Choix du format de date timestamp Mysql ou timestamp Unix
    Par audreyc dans le forum Requ�tes
    R�ponses: 2
    Dernier message: 01/04/2009, 07h20
  2. R�ponses: 8
    Dernier message: 04/03/2008, 11h02
  3. Comment convertir un timestamp n�gatif en date ?
    Par Sergejack dans le forum Requ�tes
    R�ponses: 5
    Dernier message: 05/11/2007, 17h02
  4. Formater une date via un timestamp UNIX et un mod�le modifiable
    Par Ald�hir dans le forum Contribuez / T�l�chargez Sources et Outils
    R�ponses: 7
    Dernier message: 11/09/2007, 16h43
  5. [8.5] convertir un timestamp
    Par rissorg dans le forum SAP Crystal Reports
    R�ponses: 1
    Dernier message: 22/05/2007, 13h43

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