簡體   English   中英

將double轉換為time_t

[英]Convert double to time_t

我有一個double秒鍾。 我想把它轉換成time_t

我找不到完成這個的標准功能。 我需要手工填寫time_t嗎?

std::time_t的類型未指定。

雖然沒有定義,但這幾乎總是一個整數值,它保持自UTC時間1970年1月1日00:00起的秒數(不計算閏秒)。

所以,他們之間的安全鑄造可能沒問題。 還要注意可移植性(因為它的類型沒有在標准中指定)並考慮從從double轉換為積分時不能適合的值。

計時圖書館

正如在deepmax的回答中指出的那樣, time_t的類型是實現定義的。 因此,演員不能保證成功。 值得慶幸的是, chrono庫顯着提高了時間操作的能力。

代碼示例

為了演示如何做到這一點,我在ideone上放了一個實例

說明

作為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.

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