首頁 > 後端開發 > C++ > 主體

如何從 std::chrono::time_point 物件中提取單一時間元素,例如年、月、日、小時、分鐘、秒和毫秒?

Mary-Kate Olsen
發布: 2024-11-01 06:05:02
原創
504 人瀏覽過

How can I extract individual temporal elements like year, month, day, hour, minute, second, and milliseconds from an std::chrono::time_point object?

從std::chrono::time_point 中提取時間元素

查詢:

如何從std::chrono::time_point 物件中提取特定的時間元素,例如年、月、日、小時、分鐘、秒和毫秒?

解決方案:

要從 time_point 中提取這些元素,您必須使用 system_clock::time_point,因為它與民用日曆有關係。檢索目前的system_clock::time_point:

<code class="cpp">system_clock::time_point now = system_clock::now();</code>
登入後複製

將其轉換為time_t 值:

<code class="cpp">time_t tt = system_clock::to_time_t(now);</code>
登入後複製

如果您需要UTC 時區或本地時區的時間提取,請轉換time_t 值到tm:

<code class="cpp">tm utc_tm = *gmtime(&tt);  // UTC
tm local_tm = *localtime(&tt);  // Local</code>
登入後複製

使用tm 結構的相應字段提取特定元素:

<code class="cpp">std::cout << local_tm.tm_year + 1900 << '\n';  // Year
std::cout << local_tm.tm_mon + 1 << '\n';  // Month
std::cout << local_tm.tm_mday << '\n';  // Day
登入後複製

擴展資訊:

而使用C 庫允許時間轉換,需要注意的是,每個system_clock 實作都是基於Unix 時間,通常以UTC 時間1970 年1 月1 日以來的秒為單位。

要更精確地提取,請利用system_clock precision:

<code class="cpp">system_clock::duration tp = now.time_since_epoch();
days d = duration_cast<days>(tp);  // Days
tp -= d;  // Subtract days
hours h = duration_cast<hours>(tp);  // Hours
tp -= h;  // Subtract hours
...  // Continue for minutes, seconds, and fractional seconds</code>
登入後複製

使用適當的持續時間單位列印結果:

<code class="cpp">std::cout << d.count() << "d " << h.count() << ':' << m.count() << ':' << s.count();
std::cout << " " << tp.count() << "[" << system_clock::duration::period::num << '/' << system_clock::duration::period::den << "]\n";
登入後複製

庫增強:

為了簡化時間提取,考慮使用C 11/14 庫,例如date。這將必要的代碼減少為:

<code class="cpp">auto tp = std::chrono::system_clock::now();
using date::floor;  // Namespace for streaming operator
std::cout << tp << '\n';  // Outputs date and time components
auto dp = floor<date::days>(tp);  // Omits fractional parts
auto ymd = date::year_month_day{dp};
...  // Individual elements can be accessed as members of ymd</code>
登入後複製

C 20 標準提案:

提議的C 20 工作草案包括用於從system_clock 提取這些字段的直接文法:時間點:

<code class="cpp">year_month_day ymd{floor<days>(tp)};
hh_mm_ss time{floor<milliseconds>(tp - dp)};
auto y = ymd.year();
auto m = ymd.month();
...  // Extract remaining elements similarly</code>
登入後複製

以上是如何從 std::chrono::time_point 物件中提取單一時間元素,例如年、月、日、小時、分鐘、秒和毫秒?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!