Namespaces
Variants

Standard library header <chrono> (C++11)

From cppreference.net
Standard library headers

이 헤더는 날짜 및 시간 라이브러리의 일부입니다.

목차

포함 항목

(C++20)
3-way 비교 연산자 지원

클래스

Duration
다음 네임스페이스에 정의됨 std::chrono
(C++11)
시간 간격
(클래스 템플릿)
duration이 다른 틱 주기를 가진 duration으로 변환 가능함을 나타냄
(클래스 템플릿)
주어진 타입의 틱 카운트에 대한 제로, 최소, 최대 값을 생성합니다
(클래스 템플릿)
편의 duration typedefs
정의된 네임스페이스 std::chrono
std::chrono::nanoseconds (C++11) Period가 std::nano 인 duration 타입
std::chrono::microseconds (C++11) Period가 std::micro 인 duration 타입
std::chrono::milliseconds (C++11) Period가 std::milli 인 duration 타입
std::chrono::seconds (C++11) Period가 std:: ratio < 1 > 인 duration 타입
std::chrono::minutes (C++11) Period가 std:: ratio < 60 > 인 duration 타입
std::chrono::hours (C++11) Period가 std:: ratio < 3600 > 인 duration 타입
std::chrono::days (C++20) Period가 std:: ratio < 86400 > 인 duration 타입
std::chrono::weeks (C++20) Period를 가진 duration 타입 std:: ratio < 604800 >
std::chrono::months (C++20) Period가 std:: ratio < 2629746 > 인 duration 타입
std::chrono::years (C++20) Period가 std:: ratio < 31556952 > 인 duration 타입
시간 포인트
정의된 네임스페이스 std::chrono
(C++11)
시간의 한 지점
(클래스 템플릿)
한 클록의 시간 포인트를 다른 클록으로 변환하는 방법을 정의하는 traits 클래스
(클래스 템플릿)
클록
정의된 네임스페이스 std::chrono
타입이 Clock 요구 사항을 만족하는지 판별합니다
(클래스 템플릿) (변수 템플릿)
시스템 전체 실시간 시계의 벽시계 시간
(클래스)
조정되지 않는 모노토닉 클록
(클래스)
사용 가능한 가장 짧은 틱 주기를 가진 클록
(클래스)
(C++20)
Clock 협정 세계시(UTC)를 위한 Clock
(클래스)
(C++20)
Clock 국제 원자시(TAI)를 위한 Clock
(클래스)
(C++20)
Clock GPS 시간을 위한 Clock
(class)
(C++20)
Clock 파일 시간에 사용되는 파일 시간
(typedef)
(C++20)
지역 시간을 나타내는 의사 시계
(클래스)
캘린더
정의된 네임스페이스 std::chrono
(C++20)
월의 마지막 날 또는 요일을 나타내는 태그 클래스
(클래스)
(C++20)
월의 하루를 나타냄
(클래스)
(C++20)
연도의 월을 나타냄
(class)
(C++20)
그레고리력의 연도를 나타냄
(class)
(C++20)
그레고리력의 요일을 나타냄
(class)
한 달의 n 번째 weekday 를 나타냄
(클래스)
한 달의 마지막 weekday 를 나타냄
(클래스)
(C++20)
특정 month 의 특정 day 를 나타냄
(클래스)
특정 month 의 마지막 날을 나타냄
(클래스)
특정 month 의 n th weekday 를 나타냄
(클래스)
특정 month 의 마지막 weekday 를 나타냄
(클래스)
(C++20)
특정 year 의 특정 month 를 나타냄
(클래스)
특정 year , month , 그리고 day 를 나타냄
(클래스)
특정 year month 의 마지막 날을 나타냄
(클래스)
특정 year month 의 n th weekday 를 나타냄
(클래스)
특정 year month 의 마지막 weekday 를 나타냄
(클래스)
시간대
정의된 네임스페이스 std::chrono
(C++20)
하루 중 시간을 나타냄
(클래스 템플릿)
시간대
정의된 네임스페이스 std::chrono
(C++20)
IANA 시간대 데이터베이스 사본을 기술함
(클래스)
(C++20)
tzdb 의 연결 리스트를 나타냅니다
(클래스)
(C++20)
시간대를 나타냄
(클래스)
(C++20)
특정 시간점에서의 시간대 정보를 나타냄
(클래스)
(C++20)
로컬 시간을 UNIX 시간으로 변환하는 정보를 나타냅니다
(클래스)
(C++20)
모호한 현지 시간의 해결 방법을 선택합니다
(enum)
zoned_time 에서 사용하는 시간대 포인터에 대한 traits 클래스
(클래스 템플릿)
(C++20)
시간대와 시간 점을 나타냄
(클래스)
시간대의 대체 이름을 나타냄
(클래스)
존재하지 않는 지역 시간을 보고하기 위해 던져지는 예외
(클래스)
지역 시간이 모호함을 보고하기 위해 던져지는 예외
(클래스)
윤초
정의된 네임스페이스 std::chrono
윤초 삽입에 대한 정보를 포함함
(클래스)
윤초 삽입 정보
(클래스)
특수화
정의된 네임스페이스 std
std::common_type 트레이트의 특수화
(클래스 템플릿 특수화)
std::common_type 트레이트를 특수화함
(클래스 템플릿 특수화)
duration 에 대한 포맷팅 지원
(클래스 템플릿 특수화)
sys_time 에 대한 서식 지원
(클래스 템플릿 특수화)
utc_time 에 대한 서식 지원
(클래스 템플릿 특수화)
tai_time 에 대한 서식 지원
(클래스 템플릿 특수화)
gps_time 에 대한 서식 지원
(클래스 템플릿 특수화)
file_time 에 대한 서식 지원
(클래스 템플릿 특수화)
local_time 에 대한 서식 지원
(클래스 템플릿 특수화)
day 에 대한 형식화 지원
(클래스 템플릿 특수화)
month 에 대한 서식 지원
(클래스 템플릿 특수화)
year 에 대한 서식 지원
(클래스 템플릿 특수화)
weekday 에 대한 서식 지원
(클래스 템플릿 특수화)
weekday_indexed 에 대한 서식 지원
(클래스 템플릿 특수화)
weekday_last 에 대한 서식 지원
(클래스 템플릿 특수화)
month_day 에 대한 서식 지원
(클래스 템플릿 특수화)
month_day_last 에 대한 서식 지원
(클래스 템플릿 특수화)
month_weekday 에 대한 서식 지원
(클래스 템플릿 특수화)
month_weekday_last 에 대한 서식 지원
(클래스 템플릿 특수화)
year_month 에 대한 서식 지원
(클래스 템플릿 특수화)
year_month_day 에 대한 서식 지원
(클래스 템플릿 특수화)
year_month_day_last 에 대한 서식 지정 지원
(클래스 템플릿 특수화)
year_month_weekday 에 대한 서식 지원
(클래스 템플릿 특수화)
year_month_weekday_last 에 대한 서식 지원
(클래스 템플릿 특수화)
hh_mm_ss 에 대한 포맷팅 지원
(클래스 템플릿 특수화)
sys_info 에 대한 포맷팅 지원
(클래스 템플릿 특수화)
local_info 에 대한 서식 지원
(클래스 템플릿 특수화)
zoned_time 에 대한 서식 지원
(클래스 템플릿 특수화)
std::chrono::duration 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::time_point 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::day 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::month 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::year 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::weekday 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::weekday_indexed 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::weekday_last 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::month_day 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::month_day_last 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::month_weekday 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::month_weekday_last 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::year_month 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::year_month_day 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::year_month_day_last 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::year_month_weekday 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::year_month_weekday_last 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::zoned_time 에 대한 해시 지원
(클래스 템플릿 특수화)
std::chrono::leap_second 에 대한 해시 지원
(클래스 템플릿 특수화)
전방 선언
헤더 파일에 정의됨 <functional>
(C++11)
해시 함수 객체
(클래스 템플릿)

함수

Duration
정의된 네임스페이스 std::chrono
duration을 인자로 사용하는 산술 연산 구현
(함수 템플릿)
(C++11) (C++11) (C++20에서 제거됨) (C++11) (C++11) (C++11) (C++11) (C++20)
두 지속 시간을 비교함
(함수 템플릿)
다른 틱 간격을 가진 duration으로 변환합니다
(함수 템플릿)
duration을 다른 단위로 변환하며 내림 처리
(함수 템플릿)
duration을 다른 단위로 변환하며 올림 처리
(함수 템플릿)
duration을 다른 단위로 변환하며, 가장 가까운 값으로 반올림(동점 시 짝수로)
(함수 템플릿)
기간의 절댓값을 구함
(함수 템플릿)
타임 포인트
정의된 네임스페이스 std::chrono
time point와 관련된 덧셈 및 뺄셈 연산 수행
(함수 템플릿)
(C++11) (C++11) (C++20에서 제거됨) (C++11) (C++11) (C++11) (C++11) (C++20)
두 시간 포인트를 비교함
(함수 템플릿)
동일한 클록 상에서 다른 duration을 가진 시간 포인트로 변환합니다
(함수 템플릿)
time_point를 다른 단위로 변환하며 내림 처리
(함수 템플릿)
time_point를 다른 단위로 변환하며 올림 처리
(함수 템플릿)
time_point를 다른 단위로 변환하며, 가장 가까운 값으로 반올림(동점 시 짝수로 처리)
(함수 템플릿)
제공된 형식에 따라 스트림에서 sys_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 utc_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 tai_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 gps_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 file_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 local_time 을 파싱합니다
(함수 템플릿)
(C++20)
한 클록의 시간 포인트를 다른 클록으로 변환
(함수 템플릿)
캘린더
정의된 네임스페이스 std::chrono
day 값을 비교
(함수)
두 개의 month 값을 비교
(함수)
year 값을 비교
(함수)
(C++20)
weekday 값을 비교
(함수)
(C++20)
weekday_indexed 값을 비교
(함수)
(C++20)
weekday_last 값을 비교합니다
(함수)
month_day 값을 비교
(함수)
month_day_last 값을 비교
(함수)
(C++20)
month_weekday 값을 비교
(함수)
(C++20)
두 개의 month_weekday_last 값을 비교함
(함수)
두 개의 year_month 값을 비교합니다
(함수)
year_month_day 값을 비교
(함수)
두 개의 year_month_day_last 값을 비교합니다
(함수)
(C++20)
year_month_weekday 값을 비교
(함수)
(C++20)
두 개의 year_month_weekday_last 값을 비교합니다
(함수)
일 수와 day 를 더하거나 빼거나, 두 day 사이의 차이를 구함
(함수)
month 에 대한 산술 연산 수행
(함수)
year 에 대한 산술 연산 수행
(함수)
weekday 에 대한 산술 연산 수행
(함수)
year_month 에 대한 산술 연산 수행
(함수)
year_month_day 와 일정 년수 또는 월수를 더하거나 뺌
(함수)
year_month_day_last 와 일부 연수 또는 월수를 더하거나 뺌
(함수)
year_month_weekday 에 연수나 월수를 더하거나 뺌
(함수)
year_month_weekday_last 와 일부 연수 또는 월수를 더하거나 뺌
(함수)
(C++20)
그레고리력 날짜 생성을 위한 관용적 구문
(함수)
시간대
정의된 네임스페이스 std::chrono
12시간/24시간 형식의 시간을 상호 변환
(함수)
시간대
정의된 네임스페이스 std::chrono
전역 시간대 데이터베이스 정보에 접근하고 제어합니다
(함수)
이름을 기반으로 time_zone 을 찾습니다
(함수)
time_zone 객체를 비교합니다
(함수)
(C++20)
zoned_time 값을 비교합니다
(함수 템플릿)
두 개의 time_zone_link 객체를 비교합니다
(함수)
윤초
정의된 네임스페이스 std::chrono
utc_time 객체에서 윤초 삽입 정보를 획득합니다
(함수 템플릿)
leap_second 값을 비교하거나 leap_second 값과 sys_time 을 비교합니다
(함수 템플릿)
입출력
정의된 네임스페이스 std::chrono
(C++20)
duration 에 대한 스트림 출력을 수행합니다
(함수 템플릿)
sys_time 에 대한 스트림 출력을 수행합니다
(함수 템플릿)
utc_time 에 대한 스트림 출력을 수행합니다
(함수 템플릿)
tai_time 에 대한 스트림 출력을 수행합니다
(함수 템플릿)
gps_time 에 대한 스트림 출력을 수행합니다
(함수 템플릿)
file_time 에 대한 스트림 출력을 수행합니다
(함수 템플릿)
(C++20)
스트림에 day 를 출력합니다
(함수 템플릿)
(C++20)
스트림에 month 를 출력합니다
(함수 템플릿)
(C++20)
스트림에 year 를 출력합니다
(함수 템플릿)
(C++20)
스트림에 weekday 를 출력합니다
(함수 템플릿)
(C++20)
스트림에 weekday_indexed 출력
(함수 템플릿)
(C++20)
weekday_last 를 스트림으로 출력
(함수 템플릿)
(C++20)
month_day 를 스트림으로 출력
(함수 템플릿)
(C++20)
month_day_last 를 스트림으로 출력합니다
(함수 템플릿)
(C++20)
month_weekday 를 스트림으로 출력합니다
(함수 템플릿)
(C++20)
스트림에 month_weekday_last 출력
(함수 템플릿)
(C++20)
스트림에 year_month 를 출력합니다
(함수 템플릿)
(C++20)
year_month_day 를 스트림으로 출력합니다
(함수 템플릿)
(C++20)
스트림에 year_month_day_last 를 출력합니다
(함수 템플릿)
(C++20)
스트림에 year_month_weekday 를 출력합니다
(함수 템플릿)
(C++20)
year_month_weekday_last 를 스트림으로 출력
(함수 템플릿)
(C++20)
스트림에 hh_mm_ss 출력
(함수 템플릿)
(C++20)
스트림에 sys_info 를 출력합니다
(함수 템플릿)
(C++20)
local_info 를 스트림으로 출력
(함수 템플릿)
(C++20)
zoned_time 을 스트림으로 출력
(함수 템플릿)
제공된 형식에 따라 스트림에서 day 를 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 month 를 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 year 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 weekday 를 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 month_day 를 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 year_month 를 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 year_month_day 를 파싱합니다
(함수 템플릿)
(C++20)
스트림에서 chrono 객체를 파싱합니다
(함수 템플릿)
리터럴
인라인 네임스페이스 std::literals::chrono_literals 에서 정의됨
시간을 나타내는 std::chrono::duration 리터럴
(함수)
분을 나타내는 std::chrono::duration 리터럴
(함수)
초를 나타내는 std::chrono::duration 리터럴
(함수)
밀리초를 나타내는 std::chrono::duration 리터럴
(함수)
마이크로초를 나타내는 std::chrono::duration 리터럴
(함수)
나노초를 나타내는 std::chrono::duration 리터럴
(함수)
월의 날짜를 나타내는 std::chrono::day 리터럴
(함수)
특정 연도를 나타내는 std::chrono::year 리터럴
(함수)

시놉시스

#include <compare>
namespace std {
  namespace chrono {
    // 클래스 템플릿 duration
    template<class Rep, class Period = ratio<1>> class duration;
    // 클래스 템플릿 time_point
    template<class Clock, class Duration = typename Clock::duration> class time_point;
  }
  // common_type 특수화
  template<class Rep1, class Period1, class Rep2, class Period2>
    struct common_type<chrono::duration<Rep1, Period1>,
                       chrono::duration<Rep2, Period2>>;
  template<class Clock, class Duration1, class Duration2>
    struct common_type<chrono::time_point<Clock, Duration1>,
                       chrono::time_point<Clock, Duration2>>;
  namespace chrono {
    // customization traits
    template<class Rep> struct treat_as_floating_point;
    template<class Rep>
      inline constexpr bool treat_as_floating_point_v = treat_as_floating_point<Rep>::value;
    template<class Rep> struct duration_values;
    template<class T> struct is_clock;
    template<class T> inline constexpr bool is_clock_v = is_clock<T>::value;
    // duration arithmetic
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<duration<Rep1, Period1>, duration<Rep2, Period2>>
        operator+(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<duration<Rep1, Period1>, duration<Rep2, Period2>>
        operator-(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period, class Rep2>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator*(const duration<Rep1, Period>& d, const Rep2& s);
    template<class Rep1, class Rep2, class Period>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator*(const Rep1& s, const duration<Rep2, Period>& d);
    template<class Rep1, class Period, class Rep2>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator/(const duration<Rep1, Period>& d, const Rep2& s);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<Rep1, Rep2>
        operator/(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period, class Rep2>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator%(const duration<Rep1, Period>& d, const Rep2& s);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<duration<Rep1, Period1>, duration<Rep2, Period2>>
        operator%(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    // duration comparisons
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator==(const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator< (const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator> (const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator<=(const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator>=(const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      requires /* 설명 참조 */
      constexpr auto operator<=>(const duration<Rep1, Period1>& lhs,
                                 const duration<Rep2, Period2>& rhs);
    // 변환
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration duration_cast(const duration<Rep, Period>& d);
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration floor(const duration<Rep, Period>& d);
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration ceil(const duration<Rep, Period>& d);
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration round(const duration<Rep, Period>& d);
    // duration I/O
    template<class CharT, class Traits, class Rep, class Period>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os,
                   const duration<Rep, Period>& d);
    template<class CharT, class Traits, class Rep, class Period, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    duration<Rep, Period>& d,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // 편의성을 위한 typedefs
    using nanoseconds  = duration</* 최소 64비트 크기의 부호 있는 정수형 */, nano>;
    using microseconds = duration</* 최소 55비트 크기의 부호 있는 정수형 */, micro>;
    using milliseconds = duration</* 최소 45비트 크기의 부호 있는 정수형 */, milli>;
    using seconds      = duration</* 최소 35비트 크기의 부호 있는 정수형 */>;
    using minutes      = duration</* 최소 29비트의 부호 있는 정수형 */,
                                  ratio<  60>>;
    using hours        = duration</* 최소 23비트의 부호 있는 정수형 */,
                                  ratio<3600>>;
    using days         = duration</* 최소 25비트의 부호 있는 정수형 */,
                                  ratio_multiply<ratio<24>, hours::period>>;
    using weeks        = duration</* 최소 22비트의 부호 있는 정수형 */,
                                  ratio_multiply<ratio<7>, days::period>>;
    using years        = duration</* 최소 17비트 크기의 부호 있는 정수형 */,
                                  ratio_multiply<ratio<146097, 400>, days::period>>;
    using months       = duration</* 최소 20비트 크기의 부호 있는 정수형 */,
                                  ratio_divide<years::period, ratio<12>>>;
    // time_point 연산
    template<class Clock, class Duration1, class Rep2, class Period2>
      constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
        operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Clock, class Duration2>
      constexpr time_point<Clock, common_type_t<duration<Rep1, Period1>, Duration2>>
        operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Rep2, class Period2>
      constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
        operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Clock, class Duration1, class Duration2>
      constexpr common_type_t<Duration1, Duration2>
        operator-(const time_point<Clock, Duration1>& lhs,
                  const time_point<Clock, Duration2>& rhs);
    // time_point 비교
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator==(const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator< (const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator> (const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator<=(const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator>=(const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, three_way_comparable_with<Duration1> Duration2>
       constexpr auto operator<=>(const time_point<Clock, Duration1>& lhs,
                                  const time_point<Clock, Duration2>& rhs);
    // 변환
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration>
        time_point_cast(const time_point<Clock, Duration>& t);
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration> floor(const time_point<Clock, Duration>& tp);
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration> ceil(const time_point<Clock, Duration>& tp);
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration> round(const time_point<Clock, Duration>& tp);
    // 특수화된 알고리즘
    template<class Rep, class Period>
      constexpr duration<Rep, Period> abs(duration<Rep, Period> d);
    // class system_clock
    class system_clock;
    template<class Duration>
      using sys_time  = time_point<system_clock, Duration>;
    using sys_seconds = sys_time<seconds>;
    using sys_days    = sys_time<days>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const sys_time<Duration>& tp);
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const sys_days& dp);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    sys_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class utc_clock
    class utc_clock;
    template<class Duration>
      using utc_time  = time_point<utc_clock, Duration>;
    using utc_seconds = utc_time<seconds>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const utc_time<Duration>& t);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    utc_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    struct leap_second_info;
    template<class Duration>
      leap_second_info get_leap_second_info(const utc_time<Duration>& ut);
    // class tai_clock
    class tai_clock;
    template<class Duration>
      using tai_time  = time_point<tai_clock, Duration>;
    using tai_seconds = tai_time<seconds>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const tai_time<Duration>& t);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    tai_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class gps_clock
    class gps_clock;
    template<class Duration>
      using gps_time  = time_point<gps_clock, Duration>;
    using gps_seconds = gps_time<seconds>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const gps_time<Duration>& t);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    gps_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // type file_clock
    using file_clock = /* 설명 참조 */;
    template<class Duration>
      using file_time = time_point<file_clock, Duration>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const file_time<Duration>& tp);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    file_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class steady_clock
    class steady_clock;
    // class high_resolution_clock
    class high_resolution_clock;
    // 로컬 시간
    struct local_t {};
    template<class Duration>
      using local_time  = time_point<local_t, Duration>;
    using local_seconds = local_time<seconds>;
    using local_days    = local_time<days>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const local_time<Duration>& tp);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    local_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // time_point 변환
    template<class DestClock, class SourceClock>
      struct clock_time_conversion;
    template<class DestClock, class SourceClock, class Duration>
      auto clock_cast(const time_point<SourceClock, Duration>& t);
    // class last_spec
    struct last_spec;
    // class day
    class day;
    constexpr bool operator==(const day& x, const day& y) noexcept;
    constexpr strong_ordering operator<=>(const day& x, const day& y) noexcept;
    constexpr day  operator+(const day&  x, const days& y) noexcept;
    constexpr day  operator+(const days& x, const day&  y) noexcept;
    constexpr day  operator-(const day&  x, const days& y) noexcept;
    constexpr days operator-(const day&  x, const day&  y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const day& d);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    day& d, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class month
    class month;
    constexpr bool operator==(const month& x, const month& y) noexcept;
    constexpr strong_ordering operator<=>(const month& x, const month& y) noexcept;
    constexpr month  operator+(const month&  x, const months& y) noexcept;
    constexpr month  operator+(const months& x,  const month& y) noexcept;
    constexpr month  operator-(const month&  x, const months& y) noexcept;
    constexpr months operator-(const month&  x,  const month& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month& m);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    month& m, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class year
    class year;
    constexpr bool operator==(const year& x, const year& y) noexcept;
    constexpr strong_ordering operator<=>(const year& x, const year& y) noexcept;
    constexpr year  operator+(const year&  x, const years& y) noexcept;
    constexpr year  operator+(const years& x, const year&  y) noexcept;
    constexpr year  operator-(const year&  x, const years& y) noexcept;
    constexpr years operator-(const year&  x, const year&  y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year& y);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    year& y, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class weekday
    class weekday;
    constexpr bool operator==(const weekday& x, const weekday& y) noexcept;
    constexpr weekday operator+(const weekday& x, const days&    y) noexcept;
    constexpr weekday operator+(const days&    x, const weekday& y) noexcept;
    constexpr weekday operator-(const weekday& x, const days&    y) noexcept;
    constexpr days    operator-(const weekday& x, const weekday& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const weekday& wd);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    weekday& wd, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class weekday_indexed
    class weekday_indexed;
    constexpr bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const weekday_indexed& wdi);
    // class weekday_last
    class weekday_last;
    constexpr bool operator==(const weekday_last& x, const weekday_last& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const weekday_last& wdl);
    // class month_day
    class month_day;
    constexpr bool operator==(const month_day& x, const month_day& y) noexcept;
    constexpr strong_ordering operator<=>(const month_day& x, const month_day& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_day& md);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    month_day& md, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class month_day_last
    class month_day_last;
    constexpr bool operator==(const month_day_last& x, const month_day_last& y) noexcept;
    constexpr strong_ordering operator<=>(const month_day_last& x,
                                          const month_day_last& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_day_last& mdl);
    // class month_weekday
    class month_weekday;
    constexpr bool operator==(const month_weekday& x, const month_weekday& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_weekday& mwd);
    // class month_weekday_last
    class month_weekday_last;
    constexpr bool operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_weekday_last& mwdl);
    // class year_month
    class year_month;
    constexpr bool operator==(const year_month& x, const year_month& y) noexcept;
    constexpr strong_ordering operator<=>(const year_month& x, const year_month& y) noexcept;
    constexpr year_month operator+(const year_month& ym, const months& dm) noexcept;
    constexpr year_month operator+(const months& dm, const year_month& ym) noexcept;
    constexpr year_month operator-(const year_month& ym, const months& dm) noexcept;
    constexpr months operator-(const year_month& x, const year_month& y) noexcept;
    constexpr year_month operator+(const year_month& ym, const years& dy) noexcept;
    constexpr year_month operator+(const years& dy, const year_month& ym) noexcept;
    constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month& ym);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    year_month& ym, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class year_month_day
    class year_month_day;
    constexpr bool operator==(const year_month_day& x, const year_month_day& y) noexcept;
    constexpr strong_ordering operator<=>(const year_month_day& x,
                                          const year_month_day& y) noexcept;
    constexpr year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept;
    constexpr year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept;
    constexpr year_month_day operator+(const year_month_day& ymd, const years& dy) noexcept;
    constexpr year_month_day operator+(const years& dy, const year_month_day& ymd) noexcept;
    constexpr year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept;
    constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_day& ymd);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    year_month_day& ymd,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class year_month_day_last
    class year_month_day_last;
    constexpr bool operator==(const year_month_day_last& x,
                              const year_month_day_last& y) noexcept;
    constexpr strong_ordering operator<=>(const year_month_day_last& x,
                                          const year_month_day_last& y) noexcept;
    constexpr year_month_day_last
      operator+(const year_month_day_last& ymdl, const months& dm) noexcept;
    constexpr year_month_day_last
      operator+(const months& dm, const year_month_day_last& ymdl) noexcept;
    constexpr year_month_day_last
      operator+(const year_month_day_last& ymdl, const years& dy) noexcept;
    constexpr year_month_day_last
      operator+(const years& dy, const year_month_day_last& ymdl) noexcept;
    constexpr year_month_day_last
      operator-(const year_month_day_last& ymdl, const months& dm) noexcept;
    constexpr year_month_day_last
      operator-(const year_month_day_last& ymdl, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_day_last& ymdl);
    // class year_month_weekday
    class year_month_weekday;
    constexpr bool operator==(const year_month_weekday& x,
                              const year_month_weekday& y) noexcept;
    constexpr year_month_weekday
      operator+(const year_month_weekday& ymwd, const months& dm) noexcept;
    constexpr year_month_weekday
      operator+(const months& dm, const year_month_weekday& ymwd) noexcept;
    constexpr year_month_weekday
      operator+(const year_month_weekday& ymwd, const years& dy) noexcept;
    constexpr year_month_weekday
      operator+(const years& dy, const year_month_weekday& ymwd) noexcept;
    constexpr year_month_weekday
      operator-(const year_month_weekday& ymwd, const months& dm) noexcept;
    constexpr year_month_weekday
      operator-(const year_month_weekday& ymwd, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_weekday& ymwdi);
    // class year_month_weekday_last
    class year_month_weekday_last;
    constexpr bool operator==(const year_month_weekday_last& x,
                              const year_month_weekday_last& y) noexcept;
    constexpr year_month_weekday_last
      operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
    constexpr year_month_weekday_last
      operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept;
    constexpr year_month_weekday_last
      operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
    constexpr year_month_weekday_last
      operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept;
    constexpr year_month_weekday_last
      operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
    constexpr year_month_weekday_last
      operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_weekday_last& ymwdl);
    // civil calendar conventional syntax operators
    constexpr year_month
      operator/(const year& y, const month& m) noexcept;
    constexpr year_month
      operator/(const year& y, int m) noexcept;
    constexpr month_day
      operator/(const month& m, const day& d) noexcept;
    constexpr month_day
      operator/(const month& m, int d) noexcept;
    constexpr month_day
      operator/(int m, const day& d) noexcept;
    constexpr month_day
      operator/(const day& d, const month& m) noexcept;
    constexpr month_day
      operator/(const day& d, int m) noexcept;
    constexpr month_day_last
      operator/(const month& m, last_spec) noexcept;
    constexpr month_day_last
      operator/(int m, last_spec) noexcept;
    constexpr month_day_last
      operator/(last_spec, const month& m) noexcept;
    constexpr month_day_last
      operator/(last_spec, int m) noexcept;
    constexpr month_weekday
      operator/(const month& m, const weekday_indexed& wdi) noexcept;
    constexpr month_weekday
      operator/(int m, const weekday_indexed& wdi) noexcept;
    constexpr month_weekday
      operator/(const weekday_indexed& wdi, const month& m) noexcept;
    constexpr month_weekday
      operator/(const weekday_indexed& wdi, int m) noexcept;
    constexpr month_weekday_last
      operator/(const month& m, const weekday_last& wdl) noexcept;
    constexpr month_weekday_last
      operator/(int m, const weekday_last& wdl) noexcept;
    constexpr month_weekday_last
      operator/(const weekday_last& wdl, const month& m) noexcept;
    constexpr month_weekday_last
      operator/(const weekday_last& wdl, int m) noexcept;
    constexpr year_month_day
      operator/(const year_month& ym, const day& d) noexcept;
    constexpr year_month_day
      operator/(const year_month& ym, int d) noexcept;
    constexpr year_month_day
      operator/(const year& y, const month_day& md) noexcept;
    constexpr year_month_day
      operator/(int y, const month_day& md) noexcept;
    constexpr year_month_day
      operator/(const month_day& md, const year& y) noexcept;
    constexpr year_month_day
      operator/(const month_day& md, int y) noexcept;
    constexpr year_month_day_last
      operator/(const year_month& ym, last_spec) noexcept;
    constexpr year_month_day_last
      operator/(const year& y, const month_day_last& mdl) noexcept;
    constexpr year_month_day_last
      operator/(int y, const month_day_last& mdl) noexcept;
    constexpr year_month_day_last
      operator/(const month_day_last& mdl, const year& y) noexcept;
    constexpr year_month_day_last
      operator/(const month_day_last& mdl, int y) noexcept;
    constexpr year_month_weekday
      operator/(const year_month& ym, const weekday_indexed& wdi) noexcept;
    constexpr year_month_weekday
      operator/(const year& y, const month_weekday& mwd) noexcept;
    constexpr year_month_weekday
      operator/(int y, const month_weekday& mwd) noexcept;
    constexpr year_month_weekday
      operator/(const month_weekday& mwd, const year& y) noexcept;
    constexpr year_month_weekday
      operator/(const month_weekday& mwd, int y) noexcept;
    constexpr year_month_weekday_last
      operator/(const year_month& ym, const weekday_last& wdl) noexcept;
    constexpr year_month_weekday_last
      operator/(const year& y, const month_weekday_last& mwdl) noexcept;
    constexpr year_month_weekday_last
      operator/(int y, const month_weekday_last& mwdl) noexcept;
    constexpr year_month_weekday_last
      operator/(const month_weekday_last& mwdl, const year& y) noexcept;
    constexpr year_month_weekday_last
      operator/(const month_weekday_last& mwdl, int y) noexcept;
    // class template hh_mm_ss
    template<class Duration> class hh_mm_ss;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const hh_mm_ss<Duration>& hms);
    // 12/24 시간 함수
    constexpr bool is_am(const hours& h) noexcept;
    constexpr bool is_pm(const hours& h) noexcept;
    constexpr hours make12(const hours& h) noexcept;
    constexpr hours make24(const hours& h, bool is_pm) noexcept;
    // time zone database
    struct tzdb;
    class tzdb_list;
    // 타임존 데이터베이스 접근
    const tzdb& get_tzdb();
    tzdb_list& get_tzdb_list();
    const time_zone* locate_zone(string_view tz_name);
    const time_zone* current_zone();
    // 원격 시간대 데이터베이스 지원
    const tzdb& reload_tzdb();
    string remote_version();
    // exception classes
    class nonexistent_local_time;
    class ambiguous_local_time;
    // information classes
    struct sys_info;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const sys_info& si);
    struct local_info;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const local_info& li);
    // class time_zone
    enum class choose {earliest, latest};
    class time_zone;
    bool operator==(const time_zone& x, const time_zone& y) noexcept;
    strong_ordering operator<=>(const time_zone& x, const time_zone& y) noexcept;
    // 클래스 템플릿 zoned_traits
    template<class T> struct zoned_traits;
    // 클래스 템플릿 zoned_time
    template<class Duration, class TimeZonePtr = const time_zone*> class zoned_time;
    using zoned_seconds = zoned_time<seconds>;
    template<class Duration1, class Duration2, class TimeZonePtr>
      bool operator==(const zoned_time<Duration1, TimeZonePtr>& x,
                      const zoned_time<Duration2, TimeZonePtr>& y);
    template<class CharT, class Traits, class Duration, class TimeZonePtr>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os,
                   const zoned_time<Duration, TimeZonePtr>& t);
    // 윤초 지원
    class leap_second;
    bool operator==(const leap_second& x, const leap_second& y);
    strong_ordering operator<=>(const leap_second& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator==(const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator< (const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator< (const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator> (const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator> (const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator<=(const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator<=(const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator>=(const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator>=(const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      requires three_way_comparable_with<sys_seconds, sys_time<Duration>>
      constexpr auto operator<=>(const leap_second& x, const sys_time<Duration>& y);
    // class time_zone_link
    class time_zone_link;
    bool operator==(const time_zone_link& x, const time_zone_link& y);
    strong_ordering operator<=>(const time_zone_link& x, const time_zone_link& y);
    // 포맷팅
    template<class Duration> struct /*local-time-format-t*/;    // 설명 전용
    template<class Duration>
      /*local-time-format-t*/<Duration>
        local_time_format(local_time<Duration> time, const string* abbrev = nullptr,
                          const seconds* offset_sec = nullptr);
  }
  template<class Rep, class Period, class CharT>
    struct formatter<chrono::duration<Rep, Period>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::sys_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::utc_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::tai_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::gps_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::file_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::local_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::/*local-time-format-t*/<Duration>, CharT>;
  template<class CharT> struct formatter<chrono::day, CharT>;
  template<class CharT> struct formatter<chrono::month, CharT>;
  template<class CharT> struct formatter<chrono::year, CharT>;
  template<class CharT> struct formatter<chrono::weekday, CharT>;
  template<class CharT> struct formatter<chrono::weekday_indexed, CharT>;
  template<class CharT> struct formatter<chrono::weekday_last, CharT>;
  template<class CharT> struct formatter<chrono::month_day, CharT>;
  template<class CharT> struct formatter<chrono::month_day_last, CharT>;
  template<class CharT> struct formatter<chrono::month_weekday, CharT>;
  template<class CharT> struct formatter<chrono::month_weekday_last, CharT>;
  template<class CharT> struct formatter<chrono::year_month, CharT>;
  template<class CharT> struct formatter<chrono::year_month_day, CharT>;
  template<class CharT> struct formatter<chrono::year_month_day_last, CharT>;
  template<class CharT> struct formatter<chrono::year_month_weekday, CharT>;
  template<class CharT> struct formatter<chrono::year_month_weekday_last, CharT>;
  template<class Rep, class Period, class CharT>
    struct formatter<chrono::hh_mm_ss<duration<Rep, Period>>, CharT>;
  template<class CharT> struct formatter<chrono::sys_info, CharT>;
  template<class CharT> struct formatter<chrono::local_info, CharT>;
  template<class Duration, class TimeZonePtr, class CharT>
    struct formatter<chrono::zoned_time<Duration, TimeZonePtr>, CharT>;
  namespace chrono {
    // 파싱
    template<class CharT, class Parsable>
      /* 미지정 */
        parse(const CharT* fmt, Parsable& tp);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* 미지정 */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp);
    template<class CharT, class traits, class Alloc, class Parsable>
      /* 미지정 */
        parse(const CharT* fmt, Parsable& tp,
              basic_string<CharT, traits, Alloc>& abbrev);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* 지정되지 않음 */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp,
              basic_string<CharT, Traits, Alloc>& abbrev);
    template<class CharT, class Parsable>
      /* 지정되지 않음 */
        parse(const CharT* fmt, Parsable& tp, minutes& offset);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* 지정되지 않음 */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp,
              minutes& offset);
    template<class CharT, class traits, class Alloc, class Parsable>
      /* 지정되지 않음 */
        parse(const CharT* fmt, Parsable& tp,
              basic_string<CharT, traits, Alloc>& abbrev, minutes& offset);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* 미지정 */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp,
              basic_string<CharT, Traits, Alloc>& abbrev, minutes& offset);
    // 달력 관련 상수
    inline constexpr last_spec last{};
    inline constexpr weekday Sunday{0};
    inline constexpr weekday Monday{1};
    inline constexpr weekday Tuesday{2};
    inline constexpr weekday Wednesday{3};
    inline constexpr weekday Thursday{4};
    inline constexpr weekday Friday{5};
    inline constexpr weekday Saturday{6};
    inline constexpr month January{1};
    inline constexpr month February{2};
    inline constexpr month March{3};
    inline constexpr month April{4};
    inline constexpr month May{5};
    inline constexpr month June{6};
    inline constexpr month July{7};
    inline constexpr month August{8};
    inline constexpr month September{9};
    inline constexpr month October{10};
    inline constexpr month November{11};
    inline constexpr month December{12};
  }
  inline namespace literals {
  inline namespace chrono_literals {
    // duration 리터럴 접미사
    constexpr chrono::시간                    operator""h(unsigned long long);
    constexpr chrono::duration</* 미지정 */,
                               ratio<3600, 1>> operator""h(long double);
    constexpr chrono::                operator""min(unsigned long long);
    constexpr chrono::duration</* 미지정 */,
                               ratio<60, 1>> operator""min(long double);
    constexpr chrono::                     operator""s(unsigned long long);
    constexpr chrono::duration</* 미지정 */> operator""s(long double);
    constexpr chrono::밀리초                       operator""ms(unsigned long long);
    constexpr chrono::duration</* 지정되지 않음 */, milli> operator""ms(long double);
    constexpr chrono::마이크로초                       operator""us(unsigned long long);
    constexpr chrono::duration</* 미지정 */, micro> operator""us(long double);
    constexpr chrono::나노초                       operator""ns(unsigned long long);
    constexpr chrono::duration</* 지정되지 않음 */, nano> operator""ns(long double);
    // non-member functions
    constexpr chrono::day  operator""d(unsigned long long d) noexcept;
    // non-member functions
    constexpr chrono::year operator""y(unsigned long long y) noexcept;
  }
  }
  namespace chrono {
    using namespace literals::chrono_literals;
  }
  // 해시 지원
  template<class T> struct hash;
  template<class Rep, class Period>
    struct hash<chrono::duration<Rep, Period>>;
  template<class Clock, class Duration>
    struct hash<chrono::time_point<Clock, Duration>>;
  template<> struct hash<chrono::day>;
  template<> struct hash<chrono::month>;
  template<> struct hash<chrono::year>;
  template<> struct hash<chrono::weekday>;
  template<> struct hash<chrono::weekday_indexed>;
  template<> struct hash<chrono::weekday_last>;
  template<> struct hash<chrono::month_day>;
  template<> struct hash<chrono::month_day_last>;
  template<> struct hash<chrono::month_weekday>;
  template<> struct hash<chrono::month_weekday_last>;
  template<> struct hash<chrono::year_month>;
  template<> struct hash<chrono::year_month_day>;
  template<> struct hash<chrono::year_month_day_last>;
  template<> struct hash<chrono::year_month_weekday>;
  template<> struct hash<chrono::year_month_weekday_last>;
  template<class Duration, class TimeZonePtr>
    struct hash<chrono::zoned_time<Duration, TimeZonePtr>>;
  template<> struct hash<chrono::leap_second>;
}

클래스 템플릿 std::chrono::duration

namespace std::chrono {
  template<class Rep, class Period = ratio<1>>
  class duration {
  public:
    using rep    = Rep;
    using period = typename Period::type;
  private:
    rep rep_;       // 설명용으로만 사용
  public:
    // 생성/복사/소멸
    constexpr duration() = default;
    template<class Rep2>
      constexpr explicit duration(const Rep2& r);
    template<class Rep2, class Period2>
      constexpr duration(const duration<Rep2, Period2>& d);
    ~duration() = default;
    duration(const duration&) = default;
    duration& operator=(const duration&) = default;
    // 관찰자
    constexpr rep count() const;
    // 연산
    constexpr common_type_t<duration> operator+() const;
    constexpr common_type_t<duration> operator-() const;
    constexpr duration& operator++();
    constexpr duration  operator++(int);
    constexpr duration& operator--();
    constexpr duration  operator--(int);
    constexpr duration& operator+=(const duration& d);
    constexpr duration& operator-=(const duration& d);
    constexpr duration& operator*=(const rep& rhs);
    constexpr duration& operator/=(const rep& rhs);
    constexpr duration& operator%=(const rep& rhs);
    constexpr duration& operator%=(const duration& rhs);
    // 특수 값
    static constexpr duration zero() noexcept;
    static constexpr duration min() noexcept;
    static constexpr duration max() noexcept;
  };
}

클래스 템플릿 std::chrono::time_point

namespace std::chrono {
  template<class Clock, class Duration = typename Clock::duration>
  class time_point {
  public:
    using clock    = Clock;
    using duration = Duration;
    using rep      = typename duration::rep;
    using period   = typename duration::period;
  private:
    duration d_;                                                // 설명용으로만 사용
  public:
    // 생성자
    constexpr time_point();                                     // epoch 값을 가짐
    constexpr explicit time_point(const duration& d);           // time_point() + d와 동일
    template<class Duration2>
      constexpr time_point(const time_point<clock, Duration2>& t);
    // 관찰자
    constexpr duration time_since_epoch() const;
    // 연산
    constexpr time_point& operator++();
    constexpr time_point operator++(int);
    constexpr time_point& operator--();
    constexpr time_point operator--(int);
    constexpr time_point& operator+=(const duration& d);
    constexpr time_point& operator-=(const duration& d);
    // 특수 값
    static constexpr time_point min() noexcept;
    static constexpr time_point max() noexcept;
  };
}

클래스 템플릿 std::common_type std::chrono::duration 전문화

namespace std {
  template<class Rep1, class Period1, class Rep2, class Period2>
    struct common_type<chrono::duration<Rep1, Period1>,
                       chrono::duration<Rep2, Period2>> {
      using type = chrono::duration<common_type_t<Rep1, Rep2>, /* 설명 참조 */>;
    };
}

클래스 템플릿 std::common_type std::chrono::time_point 특수화

namespace std {
  template<class Clock, class Duration1, class Duration2>
    struct common_type<chrono::time_point<Clock, Duration1>,
                       chrono::time_point<Clock, Duration2>> {
      using type = chrono::time_point<Clock, common_type_t<Duration1, Duration2>>;
    };
}

클래스 템플릿 std::chrono::treat_as_floating_point

template<class Rep> struct treat_as_floating_point : is_floating_point<Rep> { };

클래스 템플릿 std::chrono::duration_values

namespace std::chrono {
  template<class Rep>
    struct duration_values {
    public:
      static constexpr Rep zero() noexcept;
      static constexpr Rep min() noexcept;
      static constexpr Rep max() noexcept;
    };
}

클래스 std::chrono::system_clock

namespace std::chrono {
  class system_clock {
  public:
    using rep        = /* 설명 참조 */;
    using period     = ratio</* 지정되지 않음 */, /* 지정되지 않음 */>;
    using duration   = chrono::duration<rep, period>;
    using time_point = chrono::time_point<system_clock>;
    static constexpr bool is_steady = /* 지정되지 않음 */;
    static time_point now() noexcept;
    // C 타입 time_t와의 상호 변환
    static time_t      to_time_t  (const time_point& t) noexcept;
    static time_point  from_time_t(time_t t) noexcept;
  };
}

클래스 std:: chrono :: utc_clock

namespace std::chrono {
  class utc_clock {
  public:
    using rep                       = /* 부호 있는 산술 타입 */;
    using period                    = ratio</* 지정되지 않음 */, /* 지정되지 않음 */>;
    using duration                  = chrono::duration<rep, period>;
    using time_point                = chrono::time_point<utc_clock>;
    static constexpr bool is_steady = /* 지정되지 않음 */;
    static time_point now();
    template<class Duration>
      static sys_time<common_type_t<Duration, seconds>>
        to_sys(const utc_time<Duration>& t);
    template<class Duration>
      static utc_time<common_type_t<Duration, seconds>>
        from_sys(const sys_time<Duration>& t);
  };
}

클래스 std:: chrono :: tai_clock

namespace std::chrono {
  class tai_clock {
  public:
    using rep                       = /* 부호 있는 산술 타입 */;
    using period                    = ratio</* 지정되지 않음 */, /* 지정되지 않음 */>;
    using duration                  = chrono::duration<rep, period>;
    using time_point                = chrono::time_point<tai_clock>;
    static constexpr bool is_steady = /* 지정되지 않음 */;
    static time_point now();
    template<class Duration>
      static sys_time<common_type_t<Duration, seconds>>
        to_sys(const tai_time<Duration>& t);
    template<class Duration>
      static tai_time<common_type_t<Duration, seconds>>
        from_sys(const sys_time<Duration>& t);
  };
}

클래스 std:: chrono :: gps_clock

namespace std::chrono {
  class gps_clock {
  public:
    using rep                       = /* 부호 있는 산술 타입 */;
    using period                    = ratio</* 지정되지 않음 */, /* 지정되지 않음 */>;
    using duration                  = chrono::duration<rep, period>;
    using time_point                = chrono::time_point<gps_clock>;
    static constexpr bool is_steady = /* 지정되지 않음 */;
    static time_point now();
    template<class Duration>
      static sys_time<common_type_t<Duration, seconds>>
        to_sys(const gps_time<Duration>& t);
    template<class Duration>
      static gps_time<common_type_t<Duration, seconds>>
        from_sys(const sys_time<Duration>& t);
  };
}

클래스 std::chrono::steady_clock

namespace std::chrono {
  class steady_clock {
  public:
    using rep        = /* 지정되지 않음 */;
    using period     = ratio</* 지정되지 않음 */, /* 지정되지 않음 */>;
    using duration   = chrono::duration<rep, period>;
    using time_point = chrono::time_point</* 지정되지 않음 */, duration>;
    static constexpr bool is_steady = true;
    static time_point now() noexcept;
  };
}

클래스 std::chrono::high_resolution_clock

namespace std::chrono {
  class high_resolution_clock {
  public:
    using rep        = /* 지정되지 않음 */;
    using period     = ratio</* 지정되지 않음 */, /* 지정되지 않음 */>;
    using duration   = chrono::duration<rep, period>;
    using time_point = chrono::time_point</* 지정되지 않음 */, duration>;
    static constexpr bool is_steady = /* 지정되지 않음 */;
    static time_point now() noexcept;
  };
}

클래스 템플릿 std:: chrono :: clock_time_conversion

namespace std::chrono {
  template<class DestClock, class SourceClock>
  struct clock_time_conversion {};
  template<class Clock>
  struct clock_time_conversion<Clock, Clock> {
    template<class Duration>
      time_point<Clock, Duration>
        operator()(const time_point<Clock, Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<system_clock, system_clock> {
    template<class Duration>
      sys_time<Duration>
        operator()(const sys_time<Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<utc_clock, utc_clock> {
    template<class Duration>
      utc_time<Duration>
        operator()(const utc_time<Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<utc_clock, system_clock> {
    template<class Duration>
      utc_time<common_type_t<Duration, seconds>>
        operator()(const sys_time<Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<system_clock, utc_clock> {
    template<class Duration>
      sys_time<common_type_t<Duration, seconds>>
        operator()(const utc_time<Duration>& t) const;
  };
  template<class SourceClock>
  struct clock_time_conversion<system_clock, SourceClock> {
    template<class Duration>
      auto operator()(const time_point<SourceClock, Duration>& t) const
        -> decltype(SourceClock::to_sys(t));
  };
  template<class DestClock>
  struct clock_time_conversion<DestClock, system_clock> {
    template<class Duration>
      auto operator()(const sys_time<Duration>& t) const
        -> decltype(DestClock::from_sys(t));
  };
  template<class SourceClock>
  struct clock_time_conversion<utc_clock, SourceClock> {
    template<class Duration>
      auto operator()(const time_point<SourceClock, Duration>& t) const
        -> decltype(SourceClock::to_utc(t));
  };
  template<class DestClock>
  struct clock_time_conversion<DestClock, utc_clock> {
    template<class Duration>
      auto operator()(const utc_time<Duration>& t) const
        -> decltype(DestClock::from_utc(t));
  };
}

클래스 std:: chrono :: last_spec

namespace std::chrono {
  struct last_spec {
    explicit last_spec() = default;
  };
}

클래스 std:: chrono :: day

namespace std::chrono {
  class day {
    unsigned char d_;           // 설명 전용
  public:
    day() = default;
    constexpr explicit day(unsigned d) noexcept;
    constexpr day& operator++()    noexcept;
    constexpr day  operator++(int) noexcept;
    constexpr day& operator--()    noexcept;
    constexpr day  operator--(int) noexcept;
    constexpr day& operator+=(const days& d) noexcept;
    constexpr day& operator-=(const days& d) noexcept;
    constexpr explicit operator unsigned() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: month

namespace std::chrono {
  class month {
    unsigned char m_;           // 설명 전용
  public:
    month() = default;
    constexpr explicit month(unsigned m) noexcept;
    constexpr month& operator++()    noexcept;
    constexpr month  operator++(int) noexcept;
    constexpr month& operator--()    noexcept;
    constexpr month  operator--(int) noexcept;
    constexpr month& operator+=(const months& m) noexcept;
    constexpr month& operator-=(const months& m) noexcept;
    constexpr explicit operator unsigned() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: year

namespace std::chrono {
  class year {
    short y_;                   // 설명용으로만 사용
  public:
    year() = default;
    constexpr explicit year(int y) noexcept;
    constexpr year& operator++()    noexcept;
    constexpr year  operator++(int) noexcept;
    constexpr year& operator--()    noexcept;
    constexpr year  operator--(int) noexcept;
    constexpr year& operator+=(const years& y) noexcept;
    constexpr year& operator-=(const years& y) noexcept;
    constexpr year operator+() const noexcept;
    constexpr year operator-() const noexcept;
    constexpr bool is_leap() const noexcept;
    constexpr explicit operator int() const noexcept;
    constexpr bool ok() const noexcept;
    static constexpr year min() noexcept;
    static constexpr year max() noexcept;
  };
}

클래스 std:: chrono :: weekday

namespace std::chrono {
  class weekday {
    unsigned char wd_;          // 설명용 전용
  public:
    weekday() = default;
    constexpr explicit weekday(unsigned wd) noexcept;
    constexpr weekday(const sys_days& dp) noexcept;
    constexpr explicit weekday(const local_days& dp) noexcept;
    constexpr weekday& operator++()    noexcept;
    constexpr weekday  operator++(int) noexcept;
    constexpr weekday& operator--()    noexcept;
    constexpr weekday  operator--(int) noexcept;
    constexpr weekday& operator+=(const days& d) noexcept;
    constexpr weekday& operator-=(const days& d) noexcept;
    constexpr unsigned c_encoding() const noexcept;
    constexpr unsigned iso_encoding() const noexcept;
    constexpr bool ok() const noexcept;
    constexpr weekday_indexed operator[](unsigned index) const noexcept;
    constexpr weekday_last    operator[](last_spec) const noexcept;
  };
}

클래스 std:: chrono :: weekday_indexed

namespace std::chrono {
  class weekday_indexed {
    chrono::weekday  wd_;       // 설명용 전용
    unsigned char    index_;    // 설명용 전용
  public:
    weekday_indexed() = default;
    constexpr weekday_indexed(const chrono::weekday& wd, unsigned index) noexcept;
    constexpr chrono::weekday weekday() const noexcept;
    constexpr unsigned        index()   const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: weekday_last

namespace std::chrono {
  class weekday_last {
    chrono::weekday wd_;                // 설명용
    public:
    constexpr explicit weekday_last(const chrono::weekday& wd) noexcept;
    constexpr chrono::weekday weekday() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: month_day

namespace std::chrono {
  class month_day {
    chrono::month m_;           // 설명 전용
    chrono::day   d_;           // 설명 전용
  public:
    month_day() = default;
    constexpr month_day(const chrono::month& m, const chrono::day& d) noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr chrono::day   day()   const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: month_day_last

namespace std::chrono {
  class month_day_last {
    chrono::month m_;                   // 설명용 전용
  public:
    constexpr explicit month_day_last(const chrono::month& m) noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: month_weekday

namespace std::chrono {
  class month_weekday {
    chrono::month           m_;         // 설명 전용
    chrono::weekday_indexed wdi_;       // 설명 전용
  public:
    constexpr month_weekday(const chrono::month& m,
                            const chrono::weekday_indexed& wdi) noexcept;
    constexpr chrono::month           month()           const noexcept;
    constexpr chrono::weekday_indexed weekday_indexed() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: month_weekday_last

namespace std::chrono {
  class month_weekday_last {
    chrono::month        m_;    // 설명용 전용
    chrono::weekday_last wdl_;  // 설명용 전용
  public:
    constexpr month_weekday_last(const chrono::month& m,
                                 const chrono::weekday_last& wdl) noexcept;
    constexpr chrono::month        month()        const noexcept;
    constexpr chrono::weekday_last weekday_last() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: year_month

namespace std::chrono {
  class year_month {
    chrono::year  y_;           // 설명용 전용
    chrono::month m_;           // 설명용 전용
  public:
    year_month() = default;
    constexpr year_month(const chrono::year& y, const chrono::month& m) noexcept;
    constexpr chrono::year  year()  const noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr year_month& operator+=(const months& dm) noexcept;
    constexpr year_month& operator-=(const months& dm) noexcept;
    constexpr year_month& operator+=(const years& dy)  noexcept;
    constexpr year_month& operator-=(const years& dy)  noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: year_month_day

namespace std::chrono {
  class year_month_day {
    chrono::year  y_;           // 설명용 전용
    chrono::month m_;           // 설명용 전용
    chrono::day   d_;           // 설명용 전용
  public:
    year_month_day() = default;
    constexpr year_month_day(const chrono::year& y, const chrono::month& m,
                             const chrono::day& d) noexcept;
    constexpr year_month_day(const year_month_day_last& ymdl) noexcept;
    constexpr year_month_day(const sys_days& dp) noexcept;
    constexpr explicit year_month_day(const local_days& dp) noexcept;
    constexpr year_month_day& operator+=(const months& m) noexcept;
    constexpr year_month_day& operator-=(const months& m) noexcept;
    constexpr year_month_day& operator+=(const years& y)  noexcept;
    constexpr year_month_day& operator-=(const years& y)  noexcept;
    constexpr chrono::year  year()  const noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr chrono::day   day()   const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: year_month_day_last

namespace std::chrono {
  class year_month_day_last {
    chrono::year           y_;          // 설명용 전용
    chrono::month_day_last mdl_;        // 설명용 전용
  public:
    constexpr year_month_day_last(const chrono::year& y,
                                  const chrono::month_day_last& mdl) noexcept;
    constexpr year_month_day_last& operator+=(const months& m) noexcept;
    constexpr year_month_day_last& operator-=(const months& m) noexcept;
    constexpr year_month_day_last& operator+=(const years& y)  noexcept;
    constexpr year_month_day_last& operator-=(const years& y)  noexcept;
    constexpr chrono::year           year()           const noexcept;
    constexpr chrono::month          month()          const noexcept;
    constexpr chrono::month_day_last month_day_last() const noexcept;
    constexpr chrono::day            day()            const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: year_month_weekday

namespace std::chrono {
  class year_month_weekday {
    chrono::year            y_;         // 설명용 전용
    chrono::month           m_;         // 설명용 전용
    chrono::weekday_indexed wdi_;       // 설명용 전용
  public:
    year_month_weekday() = default;
    constexpr year_month_weekday(const chrono::year& y, const chrono::month& m,
                                 const chrono::weekday_indexed& wdi) noexcept;
    constexpr year_month_weekday(const sys_days& dp) noexcept;
    constexpr explicit year_month_weekday(const local_days& dp) noexcept;
    constexpr year_month_weekday& operator+=(const months& m) noexcept;
    constexpr year_month_weekday& operator-=(const months& m) noexcept;
    constexpr year_month_weekday& operator+=(const years& y)  noexcept;
    constexpr year_month_weekday& operator-=(const years& y)  noexcept;
    constexpr chrono::year            year()            const noexcept;
    constexpr chrono::month           month()           const noexcept;
    constexpr chrono::weekday         weekday()         const noexcept;
    constexpr unsigned                index()           const noexcept;
    constexpr chrono::weekday_indexed weekday_indexed() const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 std:: chrono :: year_month_weekday_last

namespace std::chrono {
  class year_month_weekday_last {
    chrono::year         y_;    // 설명용 전용
    chrono::month        m_;    // 설명용 전용
    chrono::weekday_last wdl_;  // 설명용 전용
  public:
    constexpr year_month_weekday_last(const chrono::year& y, const chrono::month& m,
                                      const chrono::weekday_last& wdl) noexcept;
    constexpr year_month_weekday_last& operator+=(const months& m) noexcept;
    constexpr year_month_weekday_last& operator-=(const months& m) noexcept;
    constexpr year_month_weekday_last& operator+=(const years& y)  noexcept;
    constexpr year_month_weekday_last& operator-=(const years& y)  noexcept;
    constexpr chrono::year         year()         const noexcept;
    constexpr chrono::month        month()        const noexcept;
    constexpr chrono::weekday      weekday()      const noexcept;
    constexpr chrono::weekday_last weekday_last() const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

클래스 템플릿 std::chrono::hh_mm_ss

namespace std::chrono {
  template<class Duration> class hh_mm_ss {
  public:
    static constexpr unsigned fractional_width = /* 설명 참조 */;
    using precision                            = /* 설명 참조 */;
    constexpr hh_mm_ss() noexcept : hh_mm_ss{Duration::zero()} {}
    constexpr explicit hh_mm_ss(Duration d);
    constexpr bool is_negative() const noexcept;
    constexpr chrono::hours hours() const noexcept;
    constexpr chrono::minutes minutes() const noexcept;
    constexpr chrono::seconds seconds() const noexcept;
    constexpr precision subseconds() const noexcept;
    constexpr explicit operator precision() const noexcept;
    constexpr precision to_duration() const noexcept;
  private:
    bool            is_neg;     // 설명 전용
    chrono::hours   h;          // 설명 전용
    chrono::minutes m;          // 설명 전용
    chrono::seconds s;          // 설명 전용
    precision       ss;         // 설명 전용
  };
}

클래스 std:: chrono :: tzdb

namespace std::chrono {
  struct tzdb {
    string                 version;
    vector<time_zone>      zones;
    vector<time_zone_link> links;
    vector<leap_second>    leap_seconds;
    const time_zone* locate_zone(string_view tz_name) const;
    const time_zone* current_zone() const;
  };
}

클래스 std:: chrono :: tzdb_list

namespace std::chrono {
  class tzdb_list {
  public:
    tzdb_list(const tzdb_list&) = delete;
    tzdb_list& operator=(const tzdb_list&) = delete;
    // 명시되지 않은 추가 생성자들
    class const_iterator;
    const tzdb& front() const noexcept;
    const_iterator erase_after(const_iterator p);
    const_iterator begin() const noexcept;
    const_iterator end()   const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend()   const noexcept;
  };
}

클래스 std:: chrono :: nonexistent_local_time

namespace std::chrono {
  class nonexistent_local_time : public runtime_error {
  public:
    template<class Duration>
      nonexistent_local_time(const local_time<Duration>& tp, const local_info& i);
  };
}

클래스 std:: chrono :: ambiguous_local_time

namespace std::chrono {
  class ambiguous_local_time : public runtime_error {
  public:
    template<class Duration>
      ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
  };
}

클래스 std:: chrono :: sys_info

namespace std::chrono {
  struct sys_info {
    sys_seconds   begin;
    sys_seconds   end;
    seconds       offset;
    minutes       save;
    string        abbrev;
  };
}

클래스 std:: chrono :: local_info

namespace std::chrono {
  struct local_info {
    static constexpr int unique      = 0;
    static constexpr int nonexistent = 1;
    static constexpr int ambiguous   = 2;
    int result;
    sys_info first;
    sys_info second;
  };
}

클래스 std:: chrono :: time_zone

namespace std::chrono {
  class time_zone {
  public:
    time_zone(time_zone&&) = default;
    time_zone& operator=(time_zone&&) = default;
    // 명시되지 않은 추가 생성자들
    string_view name() const noexcept;
    template<class Duration> sys_info   get_info(const sys_time<Duration>& st)   const;
    template<class Duration> local_info get_info(const local_time<Duration>& tp) const;
    template<class Duration>
      sys_time<common_type_t<Duration, seconds>>
        to_sys(const local_time<Duration>& tp) const;
    template<class Duration>
      sys_time<common_type_t<Duration, seconds>>
        to_sys(const local_time<Duration>& tp, choose z) const;
    template<class Duration>
      local_time<common_type_t<Duration, seconds>>
        to_local(const sys_time<Duration>& tp) const;
  };
}

클래스 템플릿 std:: chrono :: zoned_traits

namespace std::chrono {
  template<class T> struct zoned_traits {};
  template<> struct zoned_traits<const time_zone*> {
    static const time_zone* default_zone();
    static const time_zone* locate_zone(string_view name);
  };
}

클래스 템플릿 std:: chrono :: zoned_time

namespace std::chrono {
  template<class Duration, class TimeZonePtr = const time_zone*>
  class zoned_time {
  public:
    using duration = common_type_t<Duration, seconds>;
  private:
    TimeZonePtr        zone_;                   // 설명 전용
    sys_time<duration> tp_;                     // 설명 전용
    using traits = zoned_traits<TimeZonePtr>;   // 설명 전용
  public:
    zoned_time();
    zoned_time(const zoned_time&) = default;
    zoned_time& operator=(const zoned_time&) = default;
    zoned_time(const sys_time<Duration>& st);
    explicit zoned_time(TimeZonePtr z);
    explicit zoned_time(string_view name);
    template<class Duration2>
      zoned_time(const zoned_time<Duration2, TimeZonePtr>& zt);
    zoned_time(TimeZonePtr z,    const sys_time<Duration>& st);
    zoned_time(string_view name, const sys_time<Duration>& st);
    zoned_time(TimeZonePtr z,    const local_time<Duration>& tp);
    zoned_time(string_view name, const local_time<Duration>& tp);
    zoned_time(TimeZonePtr z,    const local_time<Duration>& tp, choose c);
    zoned_time(string_view name, const local_time<Duration>& tp, choose c);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& zt);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& zt, choose);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& zt);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& zt, choose);
    zoned_time& operator=(const sys_time<Duration>& st);
    zoned_time& operator=(const local_time<Duration>& ut);
    operator sys_time<duration>() const;
    explicit operator local_time<duration>() const;
    TimeZonePtr          get_time_zone()  const;
    local_time<duration> get_local_time() const;
    sys_time<duration>   get_sys_time()   const;
    sys_info             get_info()       const;
  };
  zoned_time() -> zoned_time<seconds>;
  template<class Duration>
    zoned_time(sys_time<Duration>)
      -> zoned_time<common_type_t<Duration, seconds>>;
  template<class TimeZonePtrOrName>
    using /*시간대-표현*/ =        // 설명 전용
      conditional_t<is_convertible_v<TimeZonePtrOrName, string_view>,
                    const time_zone*,
                    remove_cvref_t<TimeZonePtrOrName>>;
  template<class TimeZonePtrOrName>
    zoned_time(TimeZonePtrOrName&&)
      -> zoned_time<seconds, /*시간대-표현*/<TimeZonePtrOrName>>;
  template<class TimeZonePtrOrName, class Duration>
    zoned_time(TimeZonePtrOrName&&, sys_time<Duration>)
      -> zoned_time<common_type_t<Duration, seconds>,
                    /*시간대-표현*/<TimeZonePtrOrName>>;
  template<class TimeZonePtrOrName, class Duration>
    zoned_time(TimeZonePtrOrName&&, local_time<Duration>,
               choose = choose::가장 빠른)
      -> zoned_time<common_type_t<Duration, seconds>,
                    /*시간대-표현*/<TimeZonePtrOrName>>;
  template<class Duration, class TimeZonePtrOrName, class TimeZonePtr2>
    zoned_time(TimeZonePtrOrName&&, zoned_time<Duration, TimeZonePtr2>,
               choose = choose::가장 빠른)
      -> zoned_time<common_type_t<Duration, seconds>,
                    /*시간대-표현*/<TimeZonePtrOrName>>;
}

클래스 std::chrono::leap_second

namespace std::chrono {
  class leap_second {
  public:
    leap_second(const leap_second&)            = default;
    leap_second& operator=(const leap_second&) = default;
    // 지정되지 않은 추가 생성자들
    constexpr sys_seconds date() const noexcept;
    constexpr seconds value() const noexcept;
  };
}

클래스 std::chrono::time_zone_link

namespace std::chrono {
  class time_zone_link {
  public:
    time_zone_link(time_zone_link&&)            = default;
    time_zone_link& operator=(time_zone_link&&) = default;
    // 명시되지 않은 추가 생성자들
    string_view name()   const noexcept;
    string_view target() const noexcept;
  };
}

클래스 템플릿 local-time-format-t

namespace std::chrono {
  template<class Duration> struct /*local-time-format-t*/ {       // 설명용 전용
    local_time<Duration> time;                                    // 설명용 전용
    const string* abbrev;                                         // 설명용 전용
    const seconds* offset_sec;                                    // 설명용 전용
  };
}