spark Luc ? | 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 , 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 :
- #include "windows.h"
- #include <iostream>
- #include <chrono>
- #include <format>
- int main()
- {
- // 0. Définir la page de code de la console en UTF-8 (65001)
- SetConsoleOutputCP(65001);
- SetConsoleCP(65001);
- // 1. Récupération du nombre de millisecondes écoulées depuis le démarrage du système
- auto uptime = std::chrono::milliseconds(GetTickCount64());
- // 2. Calcul de la date de démarrage du système
- auto boot_time = std::chrono::system_clock::now() - uptime;
- // 2.1 Suppression des microsecondes
- auto boot_time_no_s = std::chrono::floor<std::chrono::seconds>(boot_time);
- // 3. Affichage de la date et l'heure de démarrage du système
- 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;
- // 4. Calcul de l'uptime en jour, heures, minutes, secondes
- auto uptime_secondes = uptime.count() / 1000;
- auto up_days = uptime_secondes / 86400;
- auto up_hours = uptime_secondes % 86400 / 3600;
- auto up_min = uptime_secondes % 86400 % 3600 / 60;
- auto up_sec = uptime_secondes % 86400 % 3600 % 60;
- // 5. Affichage
- switch (up_days)
- {
- case 0:
- std::cout << "Uptime :\t\t\t" << up_hours << " heures, " << up_min << " minutes, " << up_sec << " secondes" << std::endl;
- break;
- case 1:
- std::cout << "Uptime :\t\t\t" << up_days << " jour, " << up_hours << " heures, " << up_min << " minutes, " << up_sec << " secondes" << std::endl;
- break;
- default:
- std::cout << "Uptime :\t\t\t" << up_days << " jours, " << up_hours << " heures, " << up_min << " minutes, " << up_sec << " secondes" << std::endl;
- break;
- }
- }
|
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 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.
|