Aracılığıyla paylaş


zoned_traits Yapı

Farklı bir varsayılan saat dilimini ile zoned_timeilişkilendirmenizi ve isteğe bağlı olarak özel bir adı saat dilimiyle eşlemenizi sağlar.

Sözdizimi

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

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

Parametreler

1) T - Özel time_zonebir sağlayan türün işaretçisi.
2) Şablon bağımsız değişkenini time_zone* sağlamadığınızda, bu özelleştirme varsayılan olarak UTC saat dilimini sağlayan değerini sağlar const std::chrono::time_zone*.

Açıklamalar

Sağladığınız tür işaretçisinin veya locate_zone()statik işlevleri default_zone() sağlaması gerekmez. Ancak aksi takdirde oluşturucular zoned_time aşırı yükleme çözümlemesi sırasında dikkate alınmaz.

Üyeler

Ad Tanım
default_zone time_zone Varsayılan saat dilimi işaretçisini alır.
locate_zone time_zone Belirtilen saat dilimi için işaretçiyi alır.

Gereksinimler

Üstbilgi:<chrono>

Ad alanı:std::chrono

Derleyici Seçeneği:/std:c++latest

Microsoft C++ Visual Studio 2019 sürüm 16.10'dan başlayarak sınıfı destekler zoned_traits .

Saat dilimi verileri yalnızca Windows 10 sürüm 1903/19H1 ve üzeri ile Windows Server 2022 ve sonraki sürümlerde kullanılabilir.

default_zone

Varsayılan saat dilimi için öğesini time_zone alır. Bunun nasıl çalıştığı hakkında daha fazla bilgi için bu konunun sonundaki kod örneğine bakın.

static const time_zone* default_zone();

Dönüş değeri

Şablon bağımsız değişkeni sağlanmazsa, şablon özelleştirmesi UTC saat dilimini döndüren değerini sağlar zoned_traits<const time_zone*>. Aksi takdirde, şablon bağımsız değişkeni Ttarafından sağlanan varsayılan saat dilimini döndürür.

locate_zone

time_zone Belirtilen saat dilimi için işaretçiyi döndürür. Bunun nasıl çalıştığı hakkında daha fazla bilgi için bu konunun sonundaki kod örneğine bakın.

static const time_zone* locate_zone(string_view name);

Şablon parametreleri

name
Bulunacak saat diliminin adı. Örneğin, "UTC".

Dönüş değeri

Özel bir saat dilimi işaretçisinin şablon bağımsız değişkenini sağlamadan bir zoned_traits oluşturursanız, dönüş değeri olur std::chrono::locate_zone(name). Aksi takdirde, şablon bağımsız değişkeninde Ttanımlandığı gibi değerini locate_zone() döndürür.

Örnek: zoned_traits

Aşağıdaki örnekte, özel bir varsayılan saat dilimi sağlamak için nasıl kullanılacağı zoned_traits gösterilmektedir.

İlk olarak, CustomTimeZonePtr aracılığıyla operator->()özel saat dilimi türüne yönelik işaretçiyi sağlayan tanımlanır.

Ardından, içinde özel varsayılan saat dilimini döndürmek için tanımlanan bir zoned_traits bildirilir default_zone . Bu durumda Güney Kutbu.

Örnekte, zoned_traits<CustomTimeZonePtr>::locate_zone() belirtilen saat dilimi adını öğesine std::chrono::locate_zone()geçirir. Bu işlev, özel bir saat dilimi adını başka bir saat dilimiyle eşleyebileceğiniz yerdir.

Son olarak, stdZT bir şablon bağımsız değişkeni sağlamadığından standart time_zone işaretçiyi kullanan tanımlanır, bu nedenle sağlayan const std::chrono::time_zone*uzmanlık kullanılır.

Özel kullanımı ve ardından standart time_zone işaretçiyi görmek zoned_time için bu örneği çalıştırın.

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

Ayrıca bkz.

<chrono>
time_zone
zoned_time sınıfı
Üst bilgi dosyaları başvurusu