달력과 시간대
C++20 달력 타입 사용하기
달력과 시간대은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
C++20 달력 형식
C++20은 <chrono>에 풍부한 달력 지원을 추가했습니다. 이제 정수를 조작하는 대신 연도, 월, 일을 형식으로 직접 표현할 수 있습니다.
year,month,day- 전체 날짜를 나타내는
year_month_day
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year y{2026};
std::cout << "Year value: " << static_cast<int>(y) << '\n';
return 0;
}달력 리터럴
2026y와 15d 같은 달력 리터럴과 std::chrono::May 같은 이름이 지정된 월을 사용하면 날짜를 자연스럽게 읽을 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto y = 2026y;
auto d = 15d;
std::cout << static_cast<int>(y) << " / " << static_cast<unsigned>(d) << '\n';
return 0;
}날짜 만들기
/ 연산자로 세 부분을 결합하여 year_month_day를 만드세요. 순서는 연도, 월, 일로 읽습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year_month_day ymd = 2026y/May/30;
std::cout << static_cast<int>(ymd.year()) << "-"
<< static_cast<unsigned>(ymd.month()) << "-"
<< static_cast<unsigned>(ymd.day()) << '\n';
return 0;
}날짜 검증
year_month_day는 실제 달력 날짜인지 확인할 수 있습니다. ok()를 사용하여 2월 30일처럼 존재할 수 없는 값을 거부하세요.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year_month_day good = 2026y/February/28;
year_month_day bad = 2026y/February/30;
std::cout << std::boolalpha << good.ok() << " " << bad.ok() << '\n';
return 0;
}sys_days
날짜를 기준 시점 이후의 일수를 나타내는 sys_days로 변환하세요. 그러면 일수 연산을 수행하고 날짜 간 차이를 계산할 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
sys_days a = sys_days{2026y/May/30};
sys_days b = sys_days{2026y/May/20};
std::cout << "Days apart: " << (a - b).count() << '\n';
return 0;
}일수 연산
sys_days에 days{n}을 더하면 n일만큼 앞으로 이동하며, 그런 다음 달력 날짜로 다시 변환할 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
sys_days start = sys_days{2026y/May/30};
sys_days later = start + days{10};
year_month_day ymd = later;
std::cout << static_cast<unsigned>(ymd.day()) << "/"
<< static_cast<unsigned>(ymd.month()) << '\n';
return 0;
}요일
sys_days를 weekday로 변환하면 날짜가 무슨 요일인지 찾을 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
weekday wd{sys_days{2026y/May/30}};
std::cout << "Weekday index (Sun=0): " << wd.c_encoding() << '\n';
return 0;
}한 달의 마지막 날
특수한 last 태그는 윤년을 자동으로 처리하면서 모든 달의 마지막 날을 계산합니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year_month_day_last eom = 2024y/February/last;
year_month_day ymd = eom;
std::cout << "Feb 2024 ends on day " << static_cast<unsigned>(ymd.day()) << '\n';
return 0;
}윤년 확인
year 형식은 is_leap()을 제공하므로 나눗셈 규칙을 직접 기억할 필요가 없습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
std::cout << std::boolalpha;
std::cout << "2024 leap: " << year{2024}.is_leap() << '\n';
std::cout << "2026 leap: " << year{2026}.is_leap() << '\n';
return 0;
}시간 지점에서 날짜로
system_clock 시간 지점을 days 단위로 내림한 다음 year_month_day로 변환하면 오늘의 달력 날짜를 얻을 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto today = floor<days>(system_clock::now());
year_month_day ymd = sys_days{today};
std::cout << "Year is in range: " << (static_cast<int>(ymd.year()) > 2000) << '\n';
return 0;
}시간대
C++20은 std::chrono::zoned_time과 IANA 데이터베이스를 통해 시간대도 추가합니다. 사용 가능 여부는 표준 라이브러리에 따라 다르지만, 이 모델은 정확한 현지 시간 표시를 위해 이름이 지정된 시간대와 시간 지점을 함께 묶습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto now = system_clock::now();
auto days_part = floor<days>(now);
std::cout << "Have a UTC time point: " << (days_part.time_since_epoch().count() > 0) << '\n';
return 0;
}빠른 확인
C++20 달력 형식에 대한 이해도를 확인해 보세요.
복습
C++20의 달력 지원에 대해 배웠습니다.
/빌더와 함께 사용하는year,month,day,year_month_dayok()를 사용한 검증 및is_leap()확인- 일수 연산과 요일 조회를 위한
sys_days - 월말을 위한
last와zoned_time소개
이로써 시간 및 Chrono 라이브러리 과정을 마칩니다.
AI 튜터와 함께 C++을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“달력과 시간대” 강의는 무료인가요?
네 — “달력과 시간대” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“달력과 시간대”에서 뭘 배우나요?
C++20 달력 타입 사용하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“달력과 시간대” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.