zoned_traits
Struct
Umożliwia skojarzenie innej domyślnej strefy czasowej z elementem zoned_time
i opcjonalnie mapowania niestandardowej nazwy na strefę czasową.
Składnia
1)
template<class T>
struct zoned_traits {}; // C++20
2)
template <>
struct zoned_traits<const time_zone*>; // C++20
Parametry
1) T
— wskaźnik do typu, który udostępnia niestandardowy time_zone
element .
2) Jeśli nie podasz argumentu szablonu time_zone*
, ta specjalizacja udostępnia const std::chrono::time_zone*
wartość domyślną strefy czasowej UTC.
Uwagi
Wskaźnik do podanego typu nie musi dostarczać funkcji default_zone()
statycznych ani locate_zone()
. Ale jeśli tak nie jest, zoned_time
konstruktory nie będą brane pod uwagę podczas rozpoznawania przeciążeń.
Elementy członkowskie
Nazwa/nazwisko | opis |
---|---|
default_zone |
time_zone Pobiera wskaźnik dla domyślnej strefy czasowej. |
locate_zone |
time_zone Pobiera wskaźnik dla określonej strefy czasowej. |
Wymagania
Nagłówek: <chrono>
Przestrzeń nazw: std::chrono
Opcja kompilatora: /std:c++latest
Język Microsoft C++ obsługuje zoned_traits
klasę rozpoczynającą się w programie Visual Studio 2019 w wersji 16.10.
Dane strefy czasowej są dostępne tylko dla systemu Windows 10 w wersji 1903/19H1 i nowszych oraz systemu Windows Server 2022 i nowszych.
default_zone
Pobiera wartość time_zone
dla domyślnej strefy czasowej. Aby uzyskać więcej informacji o tym, jak to działa, zobacz przykładowy kod na końcu tego tematu.
static const time_zone* default_zone();
Wartość zwracana
Jeśli argument szablonu nie zostanie podany, specjalizacja szablonu zapewnia zoned_traits<const time_zone*>
wartość , która zwraca strefę czasową UTC. W przeciwnym razie zwraca domyślną strefę czasową podaną przez argument T
szablonu .
locate_zone
time_zone
Zwraca wskaźnik dla określonej strefy czasowej. Aby uzyskać więcej informacji o tym, jak to działa, zobacz przykładowy kod na końcu tego tematu.
static const time_zone* locate_zone(string_view name);
Parametry szablonu
name
Nazwa strefy czasowej do zlokalizowania. Na przykład "UTC"
.
Wartość zwracana
Jeśli utworzono element zoned_traits
bez podawania argumentu szablonu niestandardowego wskaźnika strefy czasowej, zwracana wartość to std::chrono::locate_zone(name)
. W przeciwnym razie zwraca wartość locate_zone()
zdefiniowaną w argumencie T
szablonu .
Przykład: zoned_traits
W poniższym przykładzie pokazano, jak zoned_traits
podać niestandardową domyślną strefę czasową.
Najpierw zdefiniowano element CustomTimeZonePtr
, który dostarcza wskaźnik do niestandardowego typu strefy czasowej za pomocą polecenia operator->()
.
zoned_traits
Następnie zadeklarowana jest wartość , w której default_zone
zdefiniowano, aby zwrócić niestandardową domyślną strefę czasową. W tym przypadku biegun południowy.
W tym przykładzie zoned_traits<CustomTimeZonePtr>::locate_zone()
przekazuje określoną nazwę strefy czasowej do std::chrono::locate_zone()
. Ta funkcja służy do mapowania niestandardowej nazwy strefy czasowej na inną strefę czasową.
Na koniec jest definiowany, stdZT
który używa standardowego time_zone
wskaźnika, ponieważ nie udostępnia argumentu szablonu, więc specjalizacja jest używana, która udostępnia const std::chrono::time_zone*
element .
Uruchom ten przykład, aby zobaczyć zoned_time
użycie niestandardowego, a następnie standardowego time_zone
wskaźnika.
// 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
Zobacz też
<chrono>
time_zone
Klasa zoned_time
Odwołanie do plików nagłówka