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 중국어 웹사이트의 기타 관련 기사를 참조하세요!