簡體   English   中英

C ++ - 我們如何在linux中獲得毫秒時間戳?

[英]C++ - How can we get a millisecond timestamp in linux?

如何將std::chrono::monotonic_clock::now()轉換為毫秒並將其轉換為long?

使用來自chrono的steady_clock或high_resolution_clock也是一樣的。 我已經看到std::chrono::duration_cast<std::chrono::milliseconds>但我只想要當前時間戳而不是任何持續時間間隔。

當前時間戳是根據某個時間點定義的(因此它是一個持續時間)。 例如,相對於Epoch的開頭(1970年1月1日,在Unix中)獲得時間戳是“典型的”。 你可以使用time_since_epoch()來做到這time_since_epoch()

namespace chr = std::chrono;

chr::time_point<chr::steady_clock> tp = chr::steady_clock::now();
std::cout << "hours since epoch: "
          << chr::duration_cast<chr::hours>(tp.time_since_epoch()).count()
          << '\n';

要獲得以毫秒為單位的值,您需要將其轉換為std::chrono::milliseconds

所有內置時鍾都有一個相關的“紀元”,這是它們的基准時間。 沒有指定時期的實際日期/時間,並且可能因時鍾而異。

如果你只想要一個數字進行比較,那么some-clock ::now().time_since_epoch()會給你一個自該時鍾紀元以來的duration時間,你可以轉換為一個整數,其count()成員duration類型。 其單位取決於時鍾的period 如果您需要特定單位,請先使用duration_cast

typedef std::chrono::steady_clock clk;
unsigned long long milliseconds_since_epoch=
    std::chrono::duration_cast<std::chrono::milliseconds>(
        clk::now().time_since_epoch()).count();

正如我所說,這只是比較好,而不是絕對的時間戳,因為這個時代沒有具體說明。

如果需要UNIX時間戳,則需要使用std::chrono::system_clock to_time_t() std::chrono::system_clock ,它具有to_time_t()函數,用於將time_point轉換為time_t

或者,您可以在程序中的特定點獲取基線計數,以及gettimeofday或其他時間的相應時間,然后使用該計數將相對計數轉換為絕對時間。

暫無
暫無

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

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