從Chrono 時間點提取時間單位
在C 中,從std::chrono::time_point 物件提取精確的時間單位取決於底層時鐘類型。 system_clock 與民用日曆有連接,可以存取年、月、日和毫秒等資料。
要取得表示目前時間的 system_clock::time_point:
<code class="cpp">std::chrono::system_clock::time_point now = std::chrono::system_clock::now();</code>
使用 C 庫將其轉換為 time_t,然後轉換為 tm 結構。此轉換選項可以是UTC 或本地時區:
<code class="cpp">std::time_t tt = std::chrono::system_clock::to_time_t(now); std::tm utc_tm = *std::gmtime(&tt); std::tm local_tm = *std::localtime(&tt);</code>
然後您可以提取所需的時間分量,例如:
<code class="cpp">int year = local_tm.tm_year + 1900; int month = local_tm.tm_mon + 1; int day = local_tm.tm_mday;</code>
此外,system_clock 通常基於在Unix 時間上,提供對小數秒的存取:
<code class="cpp">int frac_second = std::chrono::system_clock::duration::period::num / std::chrono::system_clock::duration::period::den;</code>
duration_cast 和自訂持續時間類日可用於促進精確的時間計算:
<code class="cpp">std::chrono::duration<int, std::ratio_multiply<std::chrono::hours::period, std::ratio<24>>> days; std::chrono::days d = std::chrono::duration_cast<std::chrono::days>(tp); tp -= d; std::chrono::hours h = std::chrono::duration_cast<std::chrono::hours>(tp); // ... (continue for minutes, seconds, and fractional seconds)</code>
或者,「日期」庫提供了一種簡化且通用的方法:
<code class="cpp">#include "date.h" auto tp = std::chrono::system_clock::now(); auto dp = date::floor<date::days>(tp); auto ymd = date::year_month_day{dp}; auto time = date::make_time(std::chrono::duration_cast<std::chrono::milliseconds>(tp-dp)); int year = ymd.year(); int month = ymd.month(); // ... (continue for day, hour, minute, second, millisecond)</code>
以上是如何從 C 中的 chrono::time_point 中提取特定的時間單位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!