[英]Convert double to time_t
我有一個double
秒鍾。 我想把它轉換成time_t
。
我找不到完成這個的標准功能。 我需要手工填寫time_t
嗎?
std::time_t
的類型未指定。
雖然沒有定義,但這幾乎總是一個整數值,它保持自UTC時間1970年1月1日00:00起的秒數(不計算閏秒)。
所以,他們之間的安全鑄造可能沒問題。 還要注意可移植性(因為它的類型沒有在標准中指定)並考慮從從double轉換為積分時不能適合的值。
正如在deepmax的回答中指出的那樣, time_t
的類型是實現定義的。 因此,演員不能保證成功。 值得慶幸的是, chrono庫顯着提高了時間操作的能力。
作為chrono庫提供的改進功能的示例,可以使用包含秒的double來直接構造chrono::duration<double>
。
從那里, to_time_t
可用於to_time_t
chrono::system_clock::time_point
因此只需用chrono::system_clock::time_point
chrono::duration<double>
構造chrono::system_clock::time_point
。
因此,給定double input
的秒數,我們可以完成一個獨立於實現的轉換,如下所示:
chrono::system_clock::to_time_t(chrono::system_clock::time_point(chrono::duration_cast<chrono::seconds>(chrono::duration<double>(input))))
雖然我們可以得到這個time_t
(或chrono::system_clock::time_point
),但傳統上這被認為是協調世界時的 00:00:00以來的秒數。 因此,在time_t
存儲“ 速度方程 ”的結果可能會使傳統主義者感到困惑。
如果不是轉換為time_t
而是轉換為chrono::duration<double>
那么代碼的可讀性會得到改善,因此我建議你不要再做了:
chrono::duration<double>(input)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.