날짜 및 시간대 (Date and Timezone with std::chrono)
개요
C++20의 std::chrono
라이브러리는 강력한 날짜 및 시간대 처리를 위한 기능을 제공합니다. 이 문서에서는 날짜 리터럴, 캘린더 연산, 시간대 변환 등에 대해 설명합니다.
C++ 버전별 주요 키워드 도입 시기
- C++11: 기본적인
std::chrono
기능 (시간 측정 중심) - C++14: 사용자 정의 리터럴 지원 (
h
,min
,s
,ms
,us
,ns
) - C++17: 파일 시스템 시간 처리 개선
- C++20: 캘린더 및 시간대 지원 (
std::chrono::year
,month
,day
,time_zone
등)
내용 설명
1. 날짜 표현
year
,month
,day
클래스를 사용하여 타입 안전한 날짜 표현- 날짜 리터럴:
2020y
(연도),15d
(일),January
(월) - 다양한 날짜 형식 지원 (연/월/일, 일/월/연, 월/일/연)
2. 시간대 지원
std::chrono::time_zone
클래스를 통한 시간대 관리std::chrono::zoned_time
을 사용한 시간대 인식 시간 표현- 시스템 시간대 자동 감지 및 지정된 시간대 설정 가능
예제 코드
#include <chrono>
#include <iostream>
using namespace std::chrono_literals;
int main()
{
// 시간 간격 표현
auto half_day = std::chrono::hours(12);
auto minutes = std::chrono::minutes(60);
auto seconds = std::chrono::seconds(30);
auto milliseconds = std::chrono::milliseconds(500);
auto microseconds = std::chrono::microseconds(500);
auto nanoseconds = std::chrono::nanoseconds(500);
// 다양한 날짜 형식 (C++20)
// 형식: 연/월/일
auto d1 = 2020y / 1 / 15;
auto d2 = 2020y / std::chrono::January / 15;
// 형식: 일/월/연
auto d3 = 15d / 1 / 2020;
auto d4 = 15d / std::chrono::January / 2020;
// 형식: 월/일/연
auto d5 = 1 / 15d / 2020;
auto d6 = std::chrono::January / 15 / 2020;
// 현재 시간대의 현재 시간 출력
auto time = std::chrono::zoned_time{std::chrono::current_zone(),
std::chrono::system_clock::now()};
std::cout << "현재 시간: " << time << '\n';
// 특정 시간대의 현재 시간 출력 (아시아/도쿄)
auto time2 = std::chrono::zoned_time{std::chrono::locate_zone("Asia/Tokyo"),
std::chrono::system_clock::now()};
std::cout << "도쿄 시간: " << time2 << '\n';
return 0;
}
실행 결과
실행 시점에 따라 다른 결과가 출력됩니다. 예시:
현재 시간: 2023-08-05 09:15:30 KST
도쿄 시간: 2023-08-05 09:15:30 JST
활용팁
- 날짜 연산
using namespace std::chrono; auto today = year_month_day{floor<days>(system_clock::now())}; auto tomorrow = today + days{1}; auto next_month = year_month_day{today.year(), today.month() + months{1}, today.day()};
- 시간대 변환
auto ny_time = zoned_time{"America/New_York", system_clock::now()}; auto london_time = zoned_time{"Europe/London", ny_time};
- 윤년 확인
auto y = year{2024}; bool is_leap = y.is_leap(); // true
- 요일 구하기
auto d = 2023y/August/4; auto wd = weekday{year_month_day{d}}; // Friday
- 마지막 날짜 구하기
auto last_day = year_month_day_last{2023y, month_day_last{month{8}}}; // last_day.day()는 2023년 8월의 마지막 날을 가리킴
이 문서는 C++20의 std::chrono
라이브러리를 사용한 날짜 및 시간대 처리를 다루고 있습니다. 타입 안전한 날짜 연산과 시간대 변환을 통해 국제화된 애플리케이션 개발에 유용하게 사용할 수 있습니다.
'개발 > C++ (98,03,11,14,17,20,23)' 카테고리의 다른 글
Modern C++ : std::chrono 시간 측정 (11, 14, 17, 20) (0) | 2025.09.05 |
---|---|
Modern C++ : std::mt19937 (11, 14, 17, 20) (0) | 2025.09.04 |
Modern C++ : std::filesystem (0) | 2025.09.03 |
Modern C++ : std::ostream & std::istream (98, 11, 17, 20) (0) | 2025.09.02 |
Modern C++ : std::string_view (17, 20) (1) | 2025.09.01 |
Modern C++ : Small String Optimization (SSO) (3) | 2025.08.31 |
Modern C++ : std::string (98, 11, 17, 20) (3) | 2025.08.30 |
Modern C++ : Custom Iterator Utilities (98, 11, 17, 20) (0) | 2025.08.29 |