> 백엔드 개발 > C++ > std::chrono::time_point에서 시간 구성 요소를 어떻게 추출합니까?

std::chrono::time_point에서 시간 구성 요소를 어떻게 추출합니까?

DDD
풀어 주다: 2024-10-30 23:39:29
원래의
567명이 탐색했습니다.

How do I extract temporal components from a std::chrono::time_point?

std::chrono::time_point에서 임시 구성요소 추출

system_clock::time_points의 경우 std::chrono 라이브러리는 연도, 월, 일 등의 시간성분을 추출하는 기능을 직접 제공합니다. 그러나 시스템 시계와 상용 달력 간의 기본 관계를 활용하여 이러한 구성 요소를 검색하는 것이 가능합니다.

C 라이브러리를 사용하여 구성 요소 추출

한 가지 방법은 time_point를 변환하는 것입니다. UTC 시간대로 1970년 새해 이후의 초 수를 나타내는 time_t로 변환합니다. 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 Epoch 시간 구성 요소 추출

정확한 구성 요소는 최신 시스템에서 사용되는 대부분의 시스템 시계가 1970년 1월 1일 UTC 이후의 초 수를 나타내는 Unix epoch 시간입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿