Sdílet prostřednictvím


zoned_traits Struct

Umožňuje přidružit k jinému výchozímu časovému pásmu zoned_timejiné časové pásmo a volitelně mapovat vlastní název na časové pásmo.

Syntaxe

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

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

Parametry

1) T - Ukazatel na typ, který poskytuje vlastní time_zone.
2) Pokud nezadáte time_zone* argument šablony, tato specializace poskytuje const std::chrono::time_zone*výchozí hodnotu časového pásma UTC.

Poznámky

Ukazatel na zadaný typ nemusí poskytovat statické funkce default_zone() nebo locate_zone(). Pokud to ale není, zoned_time konstruktory se během řešení přetížení nebudou považovat za vhodné.

Členové

Název Popis
default_zone time_zone Získá ukazatel výchozího časového pásma.
locate_zone time_zone Získá ukazatel pro zadané časové pásmo.

Požadavky

Záhlaví: <chrono>

Obor názvů: std::chrono

Možnost kompilátoru: /std:c++latest

Microsoft C++ podporuje zoned_traits třídu začínající v sadě Visual Studio 2019 verze 16.10.

Data časového pásma jsou dostupná jenom pro Windows 10 verze 1903/19H1 a novější a Windows Server 2022 a novější.

default_zone

time_zone Získá výchozí časové pásmo. Další informace o tom, jak to funguje, najdete v příkladu kódu na konci tohoto tématu.

static const time_zone* default_zone();

Vrácená hodnota

Pokud argument šablony není zadaný, poskytne se specializace zoned_traits<const time_zone*>šablony, která vrátí časové pásmo UTC. V opačném případě vrátí výchozí časové pásmo poskytnuté argumentem Tšablony .

locate_zone

time_zone Vrátí ukazatel pro zadané časové pásmo. Další informace o tom, jak to funguje, najdete v příkladu kódu na konci tohoto tématu.

static const time_zone* locate_zone(string_view name);

Parametry šablony

name
Název časového pásma, které chcete najít. Například "UTC".

Vrácená hodnota

Pokud jste vytvořili zoned_traits bez zadání argumentu šablony vlastního ukazatele časového pásma, je návratová hodnota std::chrono::locate_zone(name). V opačném případě vrátí hodnotu locate_zone() definovanou v argumentu Tšablony .

Příklad: zoned_traits

Následující příklad ukazuje, jak použít zoned_traits k zadání vlastního výchozího časového pásma.

Nejprve je definován, CustomTimeZonePtr který poskytuje ukazatel na vlastní typ časového pásma prostřednictvím operator->().

Pak se deklaruje, zoned_traits ve kterém default_zone je definováno vrácení vlastního výchozího časového pásma. V tomto případě jižní pól.

V příkladu zoned_traits<CustomTimeZonePtr>::locate_zone() předá zadaný název časového pásma .std::chrono::locate_zone() Tato funkce je místo, kde můžete namapovat vlastní název časového pásma na jiné časové pásmo.

Nakonec je definován, stdZT který používá standardní time_zone ukazatel, protože neposkytuje argument šablony, takže specializace se používá, která poskytuje const std::chrono::time_zone*.

Spuštěním tohoto příkladu zoned_time zobrazíte použití vlastního ukazatele a pak standardní time_zone ukazatel.

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

Viz také

<chrono>
time_zone
Třída zoned_time
Referenční informace k souborům hlaviček