Date and time library
C++는 두 가지 유형의 시간 조작을 지원합니다:
- chrono 라이브러리 , 다양한 정밀도로 시간을 추적하는 유연한 타입 모음 (예: std::chrono::time_point ).
- C-스타일 날짜 및 시간 라이브러리 (예: std::time ).
목차 |
Chrono 라이브러리 (C++11 이후)
chrono
라이브러리는 여러 주요 타입들과 유틸리티 함수들, 그리고 공통 typedef들을 정의합니다:
| (since C++20) |
클록
클록은 시작점(또는 에포크)과 틱 속도로 구성됩니다. 예를 들어, 클록은 1970년 1월 1일을 에포크로 하고 매초 틱할 수 있습니다. C++는 여러 클록 타입을 정의합니다:
|
헤더에 정의됨
<chrono>
|
|
|
네임스페이스에 정의됨
std::chrono
|
|
|
(C++11)
|
시스템 전체 실시간 시계의 벽시계 시간
(클래스) |
|
(C++11)
|
조정되지 않는 모노토닉 시계
(클래스) |
|
(C++11)
|
가장 짧은 틱 주기를 가진 시계
(클래스) |
|
(C++20)
|
타입이
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)
|
한 클록의 시간 지점을 다른 클록으로 변환하는 방법을 정의하는 특성 클래스
(클래스 템플릿) |
|
(C++20)
|
한 클록의 시간 지점을 다른 클록으로 변환
(함수 템플릿) |
지속 시간
지속 시간은 특정 시간 단위의 틱 수로 정의된 시간 간격으로 구성됩니다. 예를 들어, "42초"는 1초 시간 단위의 42틱으로 구성된 지속 시간으로 표현될 수 있습니다.
|
헤더 파일에 정의됨
<chrono>
|
|
|
네임스페이스에 정의됨
std::chrono
|
|
|
(C++11)
|
시간 간격
(클래스 템플릿) |
시간대 (C++20부터)
hh_mm_ss
는 자정 이후 경과된 시간을 나타내는 지속 시간을 시간, 분, 초 및 해당하는 경우 소수 단위 초로 분할합니다. 주로 포맷팅 도구입니다.
|
헤더 파일에 정의됨
<chrono>
|
|
|
네임스페이스에 정의됨
std::chrono
|
|
|
(C++20)
|
시간대를 나타냄
(클래스 템플릿) |
|
(C++20)
|
12시간/24시간 형식 시간대 간 변환
(함수) |
캘린더 (since C++20)
|
헤더에 정의됨
<chrono>
|
|
|
정의된 네임스페이스
std::chrono
|
|
|
(C++20)
|
월의
마지막
날 또는 요일을 나타내는
태그 클래스
(class) |
|
(C++20)
|
월의 하루를 나타냄
(클래스) |
|
(C++20)
|
연도의 월을 나타냄
(클래스) |
|
(C++20)
|
그레고리력의 연도를 나타냄
(class) |
|
(C++20)
|
그레고리력의 요일을 나타냄
(class) |
|
(C++20)
|
한 달의 n
th
weekday
요일을 나타냄
(클래스) |
|
(C++20)
|
한 달의 마지막
weekday
를 나타냄
(클래스) |
|
(C++20)
|
특정
month
의 특정
day
를 나타냄
(class) |
|
(C++20)
|
특정
month
의 마지막 날을 나타냄
(클래스) |
|
(C++20)
|
특정
month
의 n
th
weekday
를 나타냄
(클래스) |
|
(C++20)
|
특정
month
의 마지막
weekday
를 나타냄
(클래스) |
|
(C++20)
|
특정
month
와 특정
year
를 나타냄
(클래스) |
|
(C++20)
|
특정
year
,
month
, 및
day
를 나타냄
(클래스) |
|
(C++20)
|
특정
year
와
month
의 마지막 날을 나타냄
(class) |
|
(C++20)
|
특정
year
와
month
의 n
th
weekday
를 나타냄
(클래스) |
|
(C++20)
|
특정
year
와
month
의 마지막
weekday
를 나타냄
(class) |
|
(C++20)
|
그레고리력 날짜 생성을 위한 관용적 구문
(함수) |
시간대 (C++20부터)
|
헤더에 정의됨
<chrono>
|
|
|
네임스페이스에 정의됨
std::chrono
|
|
|
(C++20)
|
IANA 시간대 데이터베이스
의 사본을 기술함
(클래스) |
|
(C++20)
|
tzdb
의 연결 리스트를 나타냄
(클래스) |
|
전역 시간대 데이터베이스 정보에 접근하고 제어함
(함수) |
|
|
(C++20)
|
이름을 기반으로
time_zone
을 찾음
(함수) |
|
(C++20)
|
현재
time_zone
을 반환함
(함수) |
|
(C++20)
|
시간대를 나타냄
(클래스) |
|
(C++20)
|
특정 시간점에서의 시간대 정보를 나타냄
(클래스) |
|
(C++20)
|
지역 시간을 UNIX 시간으로 변환하는 정보를 나타냄
(클래스) |
|
(C++20)
|
모호한 지역 시간의 해결 방법을 선택함
(열거형) |
|
(C++20)
|
zoned_time
이 사용하는 시간대 포인터를 위한 특성 클래스
(클래스 템플릿) |
|
(C++20)
|
시간대와 시간점을 나타냄
(클래스) |
|
(C++20)
|
윤초 삽입에 대한 정보를 포함함
(클래스) |
|
(C++20)
|
윤초 삽입 정보
(클래스) |
|
(C++20)
|
utc_time
객체로부터 윤초 삽입 정보를 얻음
(함수 템플릿) |
|
(C++20)
|
시간대의 대체 이름을 나타냄
(클래스) |
|
(C++20)
|
지역 시간이 존재하지 않음을 보고하기 위해 던져지는 예외
(클래스) |
|
(C++20)
|
지역 시간이 모호함을 보고하기 위해 던져지는 예외
(클래스) |
리터럴 (C++14부터)
|
헤더에 정의됨
<chrono>
|
|
|
인라인 네임스페이스에 정의됨
std::literals::chrono_literals
|
|
|
(C++20)
|
특정 연도를 나타내는
std::chrono::year
리터럴
(함수) |
|
(C++20)
|
월의 일을 나타내는
std::chrono::day
리터럴
(함수) |
|
(C++14)
|
시간을 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
분을 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
밀리초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
마이크로초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
나노초를 나타내는
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