zoned_traits
Yapı
Farklı bir varsayılan saat dilimini ile zoned_time
iliş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_zone
bir 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 T
tarafı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 T
tanı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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin