Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5759 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Affichage uptime - Améliorations possibles ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Affichage uptime - Améliorations possibles ?

n°2542632
spark
Luc ?
Posté le 22-09-2026 à 06:10:10  profilanswer
 

Bonjour,
 
Pour faire suite à mon problème de reboot aléatoire de mon PC, je me suis dis qu'une commande uptime serait quand même bien pratique :o, parce que "systeminfo" en ligne de commande c'est pas pratique, faut scroller en haut de la fenêtre à chaque fois pour avoir l'heure de démarrage du système...
 
J'ai donc fais le programme suivant :
 

Code :
  1. #include "windows.h"
  2. #include <iostream>
  3. #include <chrono>
  4. #include <format>
  5. int main()
  6. {
  7.     // 0. Définir la page de code de la console en UTF-8 (65001)
  8.     SetConsoleOutputCP(65001);
  9.     SetConsoleCP(65001);
  10.     // 1. Récupération du nombre de millisecondes écoulées depuis le démarrage du système
  11.     auto uptime = std::chrono::milliseconds(GetTickCount64());
  12.     // 2. Calcul de la date de démarrage du système
  13.     auto boot_time = std::chrono::system_clock::now() - uptime;
  14.     // 2.1 Suppression des microsecondes
  15.     auto boot_time_no_s = std::chrono::floor<std::chrono::seconds>(boot_time);
  16.     // 3. Affichage de la date et l'heure de démarrage du système
  17.     std::cout << "Heure de démarrage du système:\t" << std::format("{:%Y-%m-%d %H:%M:%S}", std::chrono::current_zone()->to_local(boot_time_no_s)) << std::endl;
  18.     // 4. Calcul de l'uptime en jour, heures, minutes, secondes
  19.     auto uptime_secondes = uptime.count() / 1000;
  20.     auto up_days  = uptime_secondes / 86400;
  21.     auto up_hours = uptime_secondes % 86400 / 3600;
  22.     auto up_min   = uptime_secondes % 86400 % 3600 / 60;
  23.     auto up_sec   = uptime_secondes % 86400 % 3600 % 60;
  24.     // 5. Affichage
  25.     switch (up_days)
  26.     {
  27.     case 0:
  28.         std::cout << "Uptime :\t\t\t" << up_hours << " heures, " << up_min << " minutes, " << up_sec << " secondes" << std::endl;
  29.         break;
  30.     case 1:
  31.         std::cout << "Uptime :\t\t\t" << up_days << " jour, " << up_hours << " heures, " << up_min << " minutes, " << up_sec << " secondes" << std::endl;
  32.         break;
  33.     default:
  34.         std::cout << "Uptime :\t\t\t" << up_days << " jours, " << up_hours << " heures, " << up_min << " minutes, " << up_sec << " secondes" << std::endl;
  35.         break;
  36.     }
  37. }


 
Sortie :


C:\Users\Spark>uptime
Heure de démarrage du système:  2026-09-20 23:15:49
Uptime :                        1 jour, 6 heures, 48 minutes, 31 secondes
 
C:\Users\Spark>


 
Ca marche, ca fait exactement ce que je voulais  :sol:  
 
Ca fait des siècles que je n'ai pas développé, et encore moins en C++ moderne, je n'y connais rien à la librairie standard.
 
Est-ce qu'il y a un moyen de passer outre les deux lignes SetConsoleOutputCP/SetConsoleCP ? Le fichier source est en UTF-8
Est-ce qu'il y a pas moyen de se passer des calculs d'apothicaires pour calculer le nombre de jours/heures/minutes/secondes de l'uptime avec des objets C++ ?
 
Je ne veux pas utiliser d'IA, je veux comprendre et surtout apprendre ce que je fais.


---------------
Un cycle complet sera une série de 100.
mood
Publicité
Posté le 22-09-2026 à 06:10:10  profilanswer
 

n°2544074
spark
Luc ?
Posté le 12-10-2026 à 23:04:26  profilanswer
 

version finale :o
 

Code :
  1. #include "windows.h"
  2. #include <iostream>
  3. #include <chrono>
  4. #include <format>
  5. int main()
  6. {
  7.     // 0. Définir la page de code de la console en UTF-8 (65001)
  8.     SetConsoleOutputCP(65001);
  9.     SetConsoleCP(65001);
  10.     // 1. Récupération du nombre de millisecondes écoulées depuis le démarrage du système
  11.     auto uptime_ms = std::chrono::milliseconds(GetTickCount64());
  12.    
  13.     // 2. Calcul de la date de démarrage du système
  14.     auto now = std::chrono::system_clock::now();
  15.     auto boot_time_ms    = now - uptime_ms;
  16.     // 2.1 Suppression des microsecondes
  17.     auto now_s           = std::chrono::floor<std::chrono::seconds>(now);
  18.     auto boot_time_s     = std::chrono::floor<std::chrono::seconds>(boot_time_ms);
  19.     // 2.2 Récupération de l'heure locale suivant le fuseau horaire
  20.     auto now_local       = std::chrono::current_zone()->to_local(now_s);
  21.     auto boot_time_local = std::chrono::current_zone()->to_local(boot_time_s);
  22.     // 3. Calcul de l'uptime en jour, heures, minutes, secondes
  23.     auto uptime_seconds = uptime_ms.count() / 1000;
  24.     auto up_days  = uptime_seconds / 86400;
  25.     auto up_hours = uptime_seconds % 86400 / 3600;
  26.     auto up_mins  = uptime_seconds % 86400 % 3600 / 60;
  27.     auto up_secs  = uptime_seconds % 86400 % 3600 % 60;
  28.    
  29.     // 4. Affichage
  30.     std::cout << "Heure de démarrage du système\t: " << std::format("{:%d/%m/%Y %H:%M:%S}", boot_time_local) << std::endl;
  31.     std::cout << "Heure actuelle\t\t\t: " << std::format("{:%d/%m/%Y %H:%M:%S}", now_local) << std::endl;
  32.     std::cout << "Démarré depuis\t\t\t: " << std::format("{:02}", up_days) << ":" << std::format("{:02}", up_hours) << ":" << std::format("{:02}", up_mins) << ":" << std::format("{:02}", up_secs);
  33.     //5. Sortie
  34.     return 0;
  35. }


Message édité par spark le 12-10-2026 à 23:09:44

---------------
Un cycle complet sera une série de 100.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Affichage uptime - Améliorations possibles ?

 

Sujets relatifs
[C++] Problème avec une lib ArduinoL'algèbre de Bool écarte tous les possibles d'une simple négation
dll en C compatible vb6Batch modifier profil de couleur du parametre d'affichage
technos cloud, rust.. Quid d'apprendre le C aujourd'hui?[PowerShell] Aide syntaxe PS et affichage de résultats byte/texte
C# création de XMLDev C++ ComboBox API Windows
"appli" Java/C pour Android 4 / API level 16 (abandonné)Affichage du z-buffer
Plus de sujets relatifs à : [C++] Affichage uptime - Améliorations possibles ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)