다음을 통해 공유


zoned_traits 구조체

다른 기본 표준 시간대 zoned_time를 연결하고 필요에 따라 사용자 지정 이름을 표준 시간대에 매핑할 수 있습니다.

구문

1)
template<class T>
struct zoned_traits {}; // C++20

2)
template <>
struct zoned_traits<const time_zone*>; // C++20

매개 변수

1) T - 사용자 지정 time_zone을 제공하는 형식에 대한 포인터입니다.
2) 템플릿 인수를 time_zone* 제공하지 않으면 이 특수화는 기본적으로 UTC 표준 시간대를 제공합니다 const std::chrono::time_zone*.

설명

제공하는 형식에 대한 포인터는 정적 함수 default_zone() 또는 locate_zone(). 그렇지 않으면 zoned_time 오버로드 확인 중에 생성자가 고려되지 않습니다.

멤버

속성 설명
default_zone time_zone 기본 표준 시간대에 대한 포인터를 가져옵니다.
locate_zone time_zone 지정된 표준 시간대에 대한 포인터를 가져옵니다.

요구 사항

머리글: <chrono>

네임스페이스: std::chrono

컴파일러 옵션: /std:c++latest

Microsoft C++는 Visual Studio 2019 버전 16.10부터 클래스를 지원 zoned_traits 합니다.

표준 시간대 데이터는 Windows 10 버전 1903/19H1 이상 및 Windows Server 2022 이상에서만 사용할 수 있습니다.

default_zone

time_zone 기본 표준 시간대의 값을 가져옵니다. 작동 방식에 대한 자세한 내용은 이 항목의 끝에 있는 코드 예제 를 참조하세요.

static const time_zone* default_zone();

반환 값

템플릿 인수가 제공되지 않으면 템플릿 특수화는 UTC 표준 시간대를 반환하는 기능을 제공합니다 zoned_traits<const time_zone*>. 그렇지 않으면 템플릿 인수 T에서 제공하는 기본 표준 시간대를 반환합니다.

locate_zone

time_zone 지정된 표준 시간대에 대한 포인터를 반환합니다. 작동 방식에 대한 자세한 내용은 이 항목의 끝에 있는 코드 예제 를 참조하세요.

static const time_zone* locate_zone(string_view name);

템플릿 매개 변수

name
찾을 표준 시간대의 이름입니다. 예들 들어 "UTC"입니다.

반환 값

사용자 지정 표준 시간대 포인터의 템플릿 인수를 제공하지 않고 생성 zoned_traits 한 경우 반환 값은 .입니다 std::chrono::locate_zone(name). 그렇지 않으면 템플릿 인수T에 정의된 대로 값을 locate_zone() 반환합니다.

예: zoned_traits

다음 예제에서는 사용자 지정 기본 표준 시간대를 제공하는 데 사용하는 zoned_traits 방법을 보여줍니다.

CustomTimeZonePtr 먼저 정의됩니다. 이 정의는 을 통해 operator->()사용자 지정 표준 시간대 형식에 대한 포인터를 제공합니다.

그런 다음 사용자 zoned_traits default_zone 지정 기본 표준 시간대를 반환하도록 정의된 선언됩니다. 이 경우 남극.

이 예제 zoned_traits<CustomTimeZonePtr>::locate_zone() 에서는 지정된 표준 시간대 이름을 std::chrono::locate_zone().에 전달합니다. 이 함수는 사용자 지정 표준 시간대 이름을 다른 표준 시간대에 매핑할 수 있는 위치입니다.

마지막으로 stdZT , 템플릿 인수를 제공하지 않으므로 표준 time_zone 포인터를 사용하는 정의되므로 이를 제공하는 const std::chrono::time_zone*특수화가 사용됩니다.

이 예제를 실행하여 사용자 지정 및 표준 time_zone 포인터 사용을 확인 zoned_time 합니다.

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

struct CustomTimeZonePtr
{
    CustomTimeZonePtr() {}
    CustomTimeZonePtr(const time_zone* tz) : tzptr(tz) {}

    const time_zone* operator->() const
    {
        return tzptr;
    }

private:
    const time_zone* tzptr;
};

template <>
struct zoned_traits<CustomTimeZonePtr>
{
    static const CustomTimeZonePtr default_zone()
    {
        return CustomTimeZonePtr{ locate_zone("Antarctica/South_Pole") };
    }

    static const CustomTimeZonePtr locate_zone(std::string_view name)
    {
        // Here you can provide your own mapping between the name
        // parameter and another time zone before passing it to locate_zone()
        return CustomTimeZonePtr{ std::chrono::locate_zone(name) };
    }
};

int main()
{
    std::cout << "-- Custom time zone pointer with specialized zoned_traits and different default zone behavior --\n";
    zoned_time<seconds, CustomTimeZonePtr> myZT;
    std::cout << myZT.get_info() << "\n";

    std::cout << "-- Built-in time zone pointer with standard zoned_traits --\n";
    zoned_time<seconds, const time_zone*> stdZT;
    std::cout << stdZT.get_info() << "\n";

    return 0;
}
-- Custom time zone pointer with specialized zoned_traits and different default zone behavior --
begin: 1945-12-31 12:00:00, end: 1974-11-02 14:00:00, offset: 43200s, save: 0min, abbrev: GMT+12
-- Built-in time zone pointer with standard zoned_traits --
begin: -32767-01-01 00:00:00, end: 32767-12-31 23:59:59, offset: 0s, save: 0min, abbrev: UTC

참고 항목

<chrono>
time_zone
zoned_time 클래스
헤더 파일 참조