zoned_traits
Struct
Umožňuje přidružit k jinému výchozímu časovému pásmu zoned_time
jiné č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