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

C 11의 `std::chrono`를 사용하여 과거 날짜 문자열을 구문 분석하고 경과 시간을 계산하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-26 12:11:10
원래의
984명이 탐색했습니다.

How Can I Parse Historical Date Strings and Calculate Elapsed Time Using C  11's `std::chrono`?

과거 날짜 문자열을 C 11 날짜 표현으로 구문 분석

이 질문은 C 11의 std::chrono를 사용하여 과거 날짜 문자열을 구문 분석하는 가능성을 탐구합니다. 네임스페이스. 목표는 초, 분, 시간, 일 단위로 데이터에 액세스하기 위한 특정 요구 사항을 사용하여 특정 날짜 이후 경과된 시간을 계산하는 것입니다.

std::chrono 접근 방식

질문에 따르면 std::chrono는 이 작업에 대한 잠재적인 솔루션을 제공합니다. 다음은 제공된 날짜 문자열 형식을 사용한 분석입니다.

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));
로그인 후 복사

이 코드는 std::tm 구조체(tm)를 초기화하고 std::get_time(GCC 5 이상에서 사용 가능)을 사용하여 날짜 문자열을 구문 분석합니다. 구문 분석된 데이터를 std::chrono::time_point로 변환합니다. (tp).

GCC 5 이전 버전의 대안

GCC 5 이전에는 std::get_time을 사용할 수 없습니다. 이 경우 대안이 있습니다.

strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm);
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));
로그인 후 복사

strptime()이 구문 분석을 수행하고 프로세스는 std::get_time과 동일한 단계를 따릅니다.

시간 추출 기간 구성 요소

tp를 얻으면 코드는 시차를 계산하고 추출할 수 있습니다. 다양한 구성 요소:

auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(
    std::chrono::system_clock::now() - tp
);
uint64_t days = elapsed.count() / 60 / 60 / 24;
uint64_t hours = (elapsed.count() / 60 / 60) % 24;
uint64_t minutes = (elapsed.count() / 60) % 60;
uint64_t seconds = elapsed.count() % 60;
로그인 후 복사

이 값은 지정된 날짜 이후의 시간 간격을 일, 시, 분, 초 단위로 나타냅니다.

위 내용은 C 11의 `std::chrono`를 사용하여 과거 날짜 문자열을 구문 분석하고 경과 시간을 계산하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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