Namespaces
Variants

Date and time library

From cppreference.net

C++는 두 가지 유형의 시간 조작을 지원합니다:

목차

Chrono 라이브러리 (C++11 이후)

chrono 라이브러리는 여러 주요 타입들과 유틸리티 함수들, 그리고 공통 typedef들을 정의합니다:

(since C++20)

클록

클록은 시작점(또는 에포크)과 틱 속도로 구성됩니다. 예를 들어, 클록은 1970년 1월 1일을 에포크로 하고 매초 틱할 수 있습니다. C++는 여러 클록 타입을 정의합니다:

헤더에 정의됨 <chrono>
네임스페이스에 정의됨 std::chrono
시스템 전체 실시간 시계의 벽시계 시간
(클래스)
조정되지 않는 모노토닉 시계
(클래스)
가장 짧은 틱 주기를 가진 시계
(클래스)
타입이 Clock 인지 확인
(클래스 템플릿) (변수 템플릿)
(C++20)
Clock for Coordinated Universal Time (UTC)
(클래스)
(C++20)
Clock for International Atomic Time (TAI)
(클래스)
(C++20)
Clock for GPS time
(클래스)
(C++20)
Clock used for file time
(typedef)
(C++20)
지역 시간을 나타내는 의사 시계
(클래스)

시간점

시간 포인트(time point)는 특정 클록의 에포크(epoch) 이후 경과된 시간의 지속 기간입니다.

헤더에 정의됨 <chrono>
네임스페이스에 정의됨 std::chrono
(C++11)
시간의 한 지점
(클래스 템플릿)
한 클록의 시간 지점을 다른 클록으로 변환하는 방법을 정의하는 특성 클래스
(클래스 템플릿)
(C++20)
한 클록의 시간 지점을 다른 클록으로 변환
(함수 템플릿)

지속 시간

지속 시간은 특정 시간 단위의 틱 수로 정의된 시간 간격으로 구성됩니다. 예를 들어, "42초"는 1초 시간 단위의 42틱으로 구성된 지속 시간으로 표현될 수 있습니다.

헤더 파일에 정의됨 <chrono>
네임스페이스에 정의됨 std::chrono
(C++11)
시간 간격
(클래스 템플릿)

시간대 (C++20부터)

hh_mm_ss 는 자정 이후 경과된 시간을 나타내는 지속 시간을 시간, 분, 초 및 해당하는 경우 소수 단위 초로 분할합니다. 주로 포맷팅 도구입니다.

헤더 파일에 정의됨 <chrono>
네임스페이스에 정의됨 std::chrono
(C++20)
시간대를 나타냄
(클래스 템플릿)
12시간/24시간 형식 시간대 간 변환
(함수)

캘린더 (since C++20)

헤더에 정의됨 <chrono>
정의된 네임스페이스 std::chrono
(C++20)
월의 마지막 날 또는 요일을 나타내는 태그 클래스
(class)
(C++20)
월의 하루를 나타냄
(클래스)
(C++20)
연도의 월을 나타냄
(클래스)
(C++20)
그레고리력의 연도를 나타냄
(class)
(C++20)
그레고리력의 요일을 나타냄
(class)
한 달의 n th weekday 요일을 나타냄
(클래스)
한 달의 마지막 weekday 를 나타냄
(클래스)
(C++20)
특정 month 의 특정 day 를 나타냄
(class)
특정 month 의 마지막 날을 나타냄
(클래스)
특정 month 의 n th weekday 를 나타냄
(클래스)
특정 month 의 마지막 weekday 를 나타냄
(클래스)
(C++20)
특정 month 와 특정 year 를 나타냄
(클래스)
특정 year , month , 및 day 를 나타냄
(클래스)
특정 year month 의 마지막 날을 나타냄
(class)
특정 year month 의 n th weekday 를 나타냄
(클래스)
특정 year month 의 마지막 weekday 를 나타냄
(class)
(C++20)
그레고리력 날짜 생성을 위한 관용적 구문
(함수)

시간대 (C++20부터)

헤더에 정의됨 <chrono>
네임스페이스에 정의됨 std::chrono
(C++20)
IANA 시간대 데이터베이스 의 사본을 기술함
(클래스)
(C++20)
tzdb 의 연결 리스트를 나타냄
(클래스)
전역 시간대 데이터베이스 정보에 접근하고 제어함
(함수)
이름을 기반으로 time_zone 을 찾음
(함수)
현재 time_zone 을 반환함
(함수)
(C++20)
시간대를 나타냄
(클래스)
(C++20)
특정 시간점에서의 시간대 정보를 나타냄
(클래스)
(C++20)
지역 시간을 UNIX 시간으로 변환하는 정보를 나타냄
(클래스)
(C++20)
모호한 지역 시간의 해결 방법을 선택함
(열거형)
zoned_time 이 사용하는 시간대 포인터를 위한 특성 클래스
(클래스 템플릿)
(C++20)
시간대와 시간점을 나타냄
(클래스)
윤초 삽입에 대한 정보를 포함함
(클래스)
윤초 삽입 정보
(클래스)
utc_time 객체로부터 윤초 삽입 정보를 얻음
(함수 템플릿)
시간대의 대체 이름을 나타냄
(클래스)
지역 시간이 존재하지 않음을 보고하기 위해 던져지는 예외
(클래스)
지역 시간이 모호함을 보고하기 위해 던져지는 예외
(클래스)

리터럴 (C++14부터)

헤더에 정의됨 <chrono>
인라인 네임스페이스에 정의됨 std::literals::chrono_literals
특정 연도를 나타내는 std::chrono::year 리터럴
(함수)
월의 일을 나타내는 std::chrono::day 리터럴
(함수)
시간을 나타내는 std::chrono::duration 리터럴
(함수)
분을 나타내는 std::chrono::duration 리터럴
(함수)
초를 나타내는 std::chrono::duration 리터럴
(함수)
밀리초를 나타내는 std::chrono::duration 리터럴
(함수)
마이크로초를 나타내는 std::chrono::duration 리터럴
(함수)
나노초를 나타내는 std::chrono::duration 리터럴
(함수)

Chrono I/O (since C++20)

헤더 파일에 정의됨 <chrono>
네임스페이스에 정의됨 std::chrono
(C++20)
스트림에서 chrono 객체를 파싱함
(함수 템플릿)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_chrono 201510L (C++17) std::chrono::duration std::chrono::time_point 반올림 함수
201611L (C++17) constexpr std::chrono::duration std::chrono::time_point 모든 멤버 함수
201907L (C++20) 캘린더 시간대
202306L (C++26) std::chrono 값 클래스에 대한 해싱 지원

C 스타일 날짜 및 시간 라이브러리

또한 C 스타일 날짜 및 시간 함수들도 제공됩니다. 예를 들어 std::time_t , std::difftime , 그리고 CLOCKS_PER_SEC 등이 있습니다.

예제

#include <chrono>
#include <iostream>
long Fibonacci(unsigned n)
{
    return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);
}
int main()
{
    // 함수 호출의 실행 시간을 측정하고 표시합니다.
    const auto start{std::chrono::steady_clock::now()};
    const auto fb{Fibonacci(42)};
    const auto finish{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{finish - start};
    std::cout << "Fibonacci(42): " << fb << "\nElapsed time: ";
//  std::cout << elapsed_seconds.count() << "s\n"; // C++20 이전
    std::cout << elapsed_seconds << '\n'; // C++20의 chrono::duration operator<<
    // UTC 및 현지 시간을 출력합니다.
    const auto tp_utc{std::chrono::system_clock::now()};
    std::cout << "현재 'UTC' 시간: " << tp_utc << "\n"
                 "현재 '현지' 시간: "
              << std::chrono::current_zone()->to_local(tp_utc) << '\n';
}

가능한 출력:

Fibonacci(42): 267914296
Elapsed time: 0.728532s
Current time 'UTC' is: 2025-02-10 06:22:39.420666960
Current time 'Local' is: 2025-02-10 09:22:39.420666960