zoned_traits-Struktur

Ermöglicht es Ihnen, einer anderen Standardzeitzone eine zoned_timeandere Standardzeitzone zuzuordnen und optional einen benutzerdefinierten Namen einer Zeitzone zuzuordnen.

Syntax

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

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

Parameter

1) T - Ein Zeiger auf einen Typ, der eine benutzerdefinierte time_zone.
2) Wenn Sie das time_zone* Vorlagenargument nicht angeben, stellt const std::chrono::time_zone*diese Spezialisierung bereit, die standardmäßig die UTC-Zeitzone aufweist.

Hinweise

Der Zeiger auf den typ, den Sie bereitstellen, muss nicht die statischen Funktionen default_zone() oder locate_zone(). Wenn dies nicht der Derb ist, werden die Konstruktoren während der zoned_time Überladungsauflösung nicht berücksichtigt.

Mitglieder

Name Beschreibung
default_zone Ruft den time_zone Zeiger für die Standardzeitzone ab.
locate_zone Ruft den time_zone Zeiger für die angegebene Zeitzone ab.

Anforderungen

Header<chrono>:

Namespace:std::chrono

Compileroption:/std:c++latest

Microsoft C++ unterstützt zoned_traits die Klasse ab Visual Studio 2019, Version 16.10.

Zeitzonendaten sind nur für Windows 10, Version 1903/19H1 und höher, und Windows Server 2022 und höher verfügbar.

default_zone

Ruft die time_zone für die Standardzeitzone ab. Weitere Informationen zur Funktionsweise finden Sie im Codebeispiel am Ende dieses Themas.

static const time_zone* default_zone();

Rückgabewert

Wenn das Vorlagenargument nicht angegeben wird, stellt die Vorlagenspezialisierung bereit zoned_traits<const time_zone*>, die die UTC-Zeitzone zurückgibt. Andernfalls wird die Standardzeitzone zurückgegeben, die vom Vorlagenargument Tbereitgestellt wird.

locate_zone

Gibt den time_zone Zeiger für die angegebene Zeitzone zurück. Weitere Informationen zur Funktionsweise finden Sie im Codebeispiel am Ende dieses Themas.

static const time_zone* locate_zone(string_view name);

Vorlagenparameter

name
Der Name der zu suchenden Zeitzone. Beispiel: "UTC".

Rückgabewert

Wenn Sie ein zoned_traits Argument ohne Angabe des Vorlagenarguments eines benutzerdefinierten Zeitzonenzeigers erstellt haben, lautet std::chrono::locate_zone(name)der Rückgabewert . Andernfalls wird der Wert der locate_zone() im Vorlagenargument Tdefinierten Werte zurückgegeben.

Beispiel: zoned_traits

In diesem folgenden Beispiel wird gezeigt, wie Sie zoned_traits eine benutzerdefinierte Standardzeitzone angeben.

CustomTimeZonePtr Zunächst wird definiert, der den Zeiger auf den benutzerdefinierten Zeitzonentyp übergibtoperator->().

Anschließend wird eine zoned_traits deklariert, in der default_zone definiert ist, um die benutzerdefinierte Standardzeitzone zurückzugeben. In diesem Fall der Südpol.

Übergeben Sie im Beispiel zoned_traits<CustomTimeZonePtr>::locate_zone() den angegebenen Zeitzonennamen an std::chrono::locate_zone(). Mit dieser Funktion können Sie einen benutzerdefinierten Zeitzonennamen einer anderen Zeitzone zuordnen.

stdZT Schließlich wird definiert, was den Standardzeiger time_zone verwendet, da es kein Vorlagenargument bereitstellt, sodass die Spezialisierung verwendet wird, die bereitgestellt const std::chrono::time_zone*wird.

Führen Sie dieses Beispiel aus, time_zone um die Verwendung der zoned_time benutzerdefinierten Und dann den Standardzeiger anzuzeigen.

// 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

Siehe auch

<chrono>
time_zone
zoned_time-Klasse
Referenz zu Headerdateien