[英]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.