Udostępnij za pośrednictwem


zoned_traits Struct

Umożliwia skojarzenie innej domyślnej strefy czasowej z elementem zoned_timei 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_zoneelement .
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 Tszablonu .

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 Tszablonu .

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