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 et heure optimisé pour ecriture fichier


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Date et heure optimisé pour ecriture fichier
    Bonjour,
    Je développe un module pour générer des logs.
    Pour ça j'ai besoin de récupérer la date et l'heure du système.
    Voilà comment je procède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SYSTEMTIME Time;
    GetSystemTime(&Time);
    char buff_date[100];
    char buff_heure[100];
    GetDateFormat(LOCALE_SYSTEM_DEFAULT,NULL,&Time,"dd'/'MM'/'yy",buff_date,100);                
    GetTimeFormat(LOCALE_SYSTEM_DEFAULT,NULL,&Time," HH':'mm':'ss tt",buff_heure,100);               
    strcat(buff_date, buff_heure);
    Ma question est de savoir si ces lignes sont performants ou existe-t-il une manière plus rapide pour récupérer ces infos ( sans time.h ) ?

    Merci de votre réponse.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Sans time.h ça m'etonnerai. Par contre si tu veux récupéré le temps , mais pas dans le format dd / mm / yy
    Euh d'ailleurs , failli dire une bétise ... il semble que ton code soit du code windows , et que donc tu n'as pas une fonction gettimeofday.
    Enfin en solution je proposais juste de prendre le nombre de ticks ( horloges CPU ) depuis le lancement du programme ... mais si tu veux un format dd / mm / yy , je pense que ton code et pas trop mal. À voir avec des gens qui savent mieux ... :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Voici la fonction que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    std::string StrDateTime()
    {
    	char date[40],time[40];
    	date[GetDateFormatA(
    		MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT)
    		,0ul,NULL,"yyyy'-'MM'-'dd",date,40)-1]=0;
    	time[GetTimeFormatA(
    		MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT)
    		,0ul,NULL,"HH':'mm':'ss",time,40)-1]=0;
    	std::string s(date);s+=' ';s+=time;
    	return s;
    }
    C'est simple et facile, et peut-être le plus performant si tu veux que le temps soit formatté de manière lisible. Mais ça n'a pas besoin d'être plus performant que ça, ce n'est pas une fonction à appeler 1000 fois par seconde (serait-ce bien utile ?).

    Dans le même genre, voici un autre petit code utile pour du log sous Windows en récupérant les messages induits par GetLastError()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class WinErrorMessage
    {
    	LPSTR f_lpMsgBuf;
    public:
    	WinErrorMessage()
    		:f_lpMsgBuf(NULL) {}
    	~WinErrorMessage()
    		{ if (f_lpMsgBuf) ::LocalFree(f_lpMsgBuf); }
    	LPCSTR Format(DWORD dwMessageId)
    	{
    		if (f_lpMsgBuf)
    			::LocalFree(f_lpMsgBuf);
    		::FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM
    			,NULL,dwMessageId,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT) // Default language
    			,(LPSTR)&f_lpMsgBuf,0,NULL);
    		return f_lpMsgBuf;
    	}
    	LPCSTR Format()
    		{ return Format(::GetLastError()); }
    	operator LPCSTR()
    		{ return f_lpMsgBuf; }
    };

  4. #4
    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 518
    Points
    41 518
    Par défaut
    Sympa, mais tu devrais faire ton choix entre char et TCHAR, et t'y tenir: Soit tu utilises des TCHAR partout, soit tu appelles explicitement FormatMessageA()...
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Merci pour votre aide, j'ai opter pour la fonction StrDateTime() de Camboui qui me parait plutôt pas mal.

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

Discussions similaires

  1. Nom de fichier avec date et heure
    Par Pipon dans le forum Général VBA
    Réponses: 7
    Dernier message: 19/10/2012, 11h17
  2. [FB1.5] Trigger pour date et heure
    Par Mister Nono dans le forum SQL
    Réponses: 4
    Dernier message: 11/09/2007, 16h09
  3. un controle pour saisir date ET heure
    Par riccco dans le forum VBA Access
    Réponses: 10
    Dernier message: 18/05/2007, 09h16
  4. [Indy TIdFtp] Date et Heure d'un fichier
    Par portu dans le forum Delphi
    Réponses: 2
    Dernier message: 06/06/2006, 15h21
  5. Réponses: 2
    Dernier message: 19/05/2006, 13h48

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