從std::chrono::time_point 中提取時間分量
對於system_clock::time_points,std::chrono 庫不會直接提供萃取時間成分(例如年、月和日)的功能。但是,可以透過利用系統時鐘和民用日曆之間的底層關係來檢索這些組件。
使用 C 庫提取元件
一種方法涉及轉換 time_point time_t,表示 UTC 時區自 1970 年新年以來的秒數。使用 C 函式庫的時間操作函數,您可以將 time_t 轉換為 tm 結構,其中包含年、月和日等元件。以下程式碼示範了這種方法:
<code class="cpp">system_clock::time_point now = system_clock::now(); time_t tt = system_clock::to_time_t(now); tm utc_tm = *gmtime(&tt); // Convert to UTC time std::cout << utc_tm.tm_year + 1900 << '\n'; std::cout << utc_tm.tm_mon + 1 << '\n'; std::cout << utc_tm.tm_mday << '\n';
提取Unix 紀元時間分量
透過認識到現代系統中使用的大多數系統時鐘都是基於Unix紀元時間,表示自UTC 1970 年1 月1 日以來的秒數。雖然 std::chrono 不提供直接存取該值的方法,但可以透過從紀元以來經過的總時間中減去來提取組件。
<code class="cpp">typedef duration<int, ratio_multiply<hours::period, ratio<24>>> days; system_clock::time_point now = system_clock::now(); system_clock::duration tp = now.time_since_epoch(); days d = duration_cast<days>(tp); tp -= d; hours h = duration_cast<hours>(tp); tp -= h; minutes m = duration_cast<minutes>(tp); tp -= m; seconds s = duration_cast<seconds>(tp); tp -= s; // Remaining portion of a second with system_clock::duration precision std::cout << d.count() << "d " << h.count() << ':' << m.count() << ':' << s.count() << '\n';
使用僅標頭的C 11/14 庫
僅日期的標頭庫提供了更方便的解決方案,讓您可以輕鬆提取這些組件:
<code class="cpp">#include "date.h" #include <iostream> int main() { namespace C = std::chrono; namespace D = date; namespace S = std; auto tp = C::system_clock::now(); auto dp = D::floor<D::days>(tp); auto ymd = D::year_month_day{dp}; auto time = D::make_time(C::duration_cast<C::milliseconds>(tp - dp)); S::cout << "year = " << ymd.year() << '\n'; S::cout << "month = " << ymd.month() << '\n'; S::cout << "day = " << ymd.day() << '\n'; S::cout << "hour = " << time.hours().count() << "h\n"; S::cout << "minute = " << time.minutes().count() << "min\n"; S::cout << "second = " << time.seconds().count() << "s\n"; S::cout << "millisecond = " << time.subseconds().count() << "ms\n"; }</code>
C 20 Standard庫功能(即將推出)
在即將推出的C 20 標準中,支援從system_clock::time_point 直接提取時間分量。文法如下:
<code class="cpp">auto tp = system_clock::now(); auto dp = floor<days>(tp); year_month_day ymd{dp}; hh_mm_ss time{floor<milliseconds>(tp - dp)}; auto y = ymd.year(); auto m = ymd.month(); auto d = ymd.day(); auto h = time.hours(); auto M = time.minutes(); auto s = time.seconds(); auto ms = time.subseconds();</code>
以上是如何從 std::chrono::time_point 中提取時間分量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!