zoned_traits
-Struktur
Ermöglicht es Ihnen, einer anderen Standardzeitzone eine zoned_time
andere 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 T
bereitgestellt 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 T
definierten 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