> 백엔드 개발 > C++ > 본문

std::chrono::time_point 객체에서 연도, 월, 일, 시, 분, 초, 밀리초와 같은 개별 시간 요소를 어떻게 추출할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-11-01 06:05:02
원래의
503명이 탐색했습니다.

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 구현은 일반적으로 1970년 1월 1일 UTC 이후 초 단위로 측정되는 Unix 시간을 기반으로 한다는 점에 유의하는 것이 중요합니다.

보다 정확한 추출을 위해서는 다음을 활용하세요. system_clock 정밀도:

<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";
로그인 후 복사

라이브러리 개선 사항:

단순한 시간 추출을 위해, date와 같은 C 11/14 라이브러리 사용을 고려해 보세요. 이렇게 하면 필요한 코드가 다음과 같이 줄어듭니다.

<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 학습자의 빠른 성장을 도와주세요!