簡體   English   中英

如何使用將 stable_clock 時間格式化為 HH:MM:SS.Milliseconds<chrono> 來自 c++ stdl?</chrono>

[英]How to format steady_clock time into HH:MM:SS.Milliseconds using <chrono>from c++ stdl?

我目前正在為我的 C++ 編程 class 制作一個小游戲,教授要求我們為游戲設置一個計時器。 我們根本沒有討論過如何使用計時器和任何標准計時器庫,所以我們只能靠自己了。 我找到了 std 庫,並嘗試為游戲實現一個簡單的計時器並設法做到了,但我似乎無法弄清楚如何將時間從它格式化為更用戶友好的版本,如 HH:MM:SS .毫秒。 我所擁有的只是從開始穩定時鍾到結束它的原始時間,我可以以秒、毫秒、分鍾等為單位顯示它,但這看起來不像我想要的那么好。 我找到了一些解決方案,但它們對我來說太難了,甚至無法解構並嘗試應用。 有什么簡單的方法可以做我想做的事嗎? 我實現計時器的部分代碼:

        // Initialize game timer using <chrono>
        chrono::steady_clock::time_point start = chrono::steady_clock::now();

        // While game is running (player alive and enemy robot lefts) update map
        while (!GameEnd){
            show_maze(maze_map);
            cout << endl;
            playerMove(x, y, GameEnd, died, maze_map);
        }
        // Terminate game timer and calculate time elapsed
        chrono::steady_clock::time_point end = chrono::steady_clock::now();
        chrono::steady_clock::duration time_elapsed = end - start;

        // Show last map state before either player died or no more robots left
        show_maze(maze_map);
        
        // Boo / congratulate player for his performance on the game
        cout << "Game Over! You " << (died ? "died by hitting a fence/robot :(" : "won because all the robots died. Congratulations!") << endl;
        cout << "Your game lasted for " << chrono::duration_cast<chrono::milliseconds>(time_elapsed).count() << " milliseconds.\n\n";
    

您可以通過以下方式獲取time_elapsed的小時數:

auto h = chrono::duration_cast<chrono::hours>(time_elapsed);

然后您可以減去小時數,以便time_elapsed僅保留少於一小時的持續時間:

time_elapsed -= h;

然后你可以得到time_elapsed的分鍾數:

auto m = chrono::duration_cast<chrono::minutes>(time_elapsed);

並減去分鍾...

time_elapsed -= m;

現在time_elapsed的持續時間不到一分鍾。 您可以繼續使用此模式,直至達到您想要的任何粒度。

C++20 有一種稱為std::chrono::hh_mm_ss的類型,它為了方便而精確地執行此操作:

chrono::hh_mm_ss hms{time_elapsed};

hh_mm_sshours()minutes()seconds()subseconds() getter,它們返回各自的計時單位。 據我所知,目前還沒有供應商提供此功能,但您可以在此處預覽 C++20 的這一部分,它與 C++11/14/17 一起使用。

#include "date/date.h"
#include <chrono>
#include <iostream>

int
main()
{
    using namespace std;
    chrono::steady_clock::time_point start = chrono::steady_clock::now();
    // ...
    chrono::steady_clock::time_point end = chrono::steady_clock::now();
    chrono::steady_clock::duration time_elapsed = end - start;
    cout << date::hh_mm_ss{chrono::duration_cast<chrono::milliseconds>(time_elapsed)} << '\n';
}

Output:

00:00:00.000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM