C++ Academy · 강의

달력과 시간대

C++20 달력 타입 사용하기

레슨 4/413개 단계

달력과 시간대은(는) 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_day
  • ok()를 사용한 검증 및 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 기간과 시계
  2. 시간 지점
  3. 코드 성능 측정
  4. 달력과 시간대
← C++ Academy(으)로 돌아가기