zoned_traits
結構
可讓您將不同的預設時區與 zoned_time
產生關聯,並選擇性地將自定義名稱對應至時區。
語法
1)
template<class T>
struct zoned_traits {}; // C++20
2)
template <>
struct zoned_traits<const time_zone*>; // C++20
參數
1) T
- 提供自定義 之型別 time_zone
的指標。
2) 當您未提供 time_zone*
範本自變數時,此特製化會提供 const std::chrono::time_zone*
,其預設為 UTC 時區。
備註
您提供的型別指標不需要提供靜態函 default_zone()
式或 locate_zone()
。 但如果不是,建 zoned_time
構函式就不會在多載解析期間考慮。
成員
名稱 | 描述 |
---|---|
default_zone |
time_zone 取得預設時區的指標。 |
locate_zone |
time_zone 取得指定時區的指標。 |
需求
標頭: <chrono>
命名空間:std::chrono
編譯程序選項: /std:c++latest
Microsoft C++支援 zoned_traits
從 Visual Studio 2019 16.10 版開始的類別。
時區數據僅適用於 Windows 10 版本 1903/19H1 和更新版本,以及 Windows Server 2022 和更新版本。
default_zone
time_zone
取得預設時區的 。 如需此運作方式的詳細資訊,請參閱本主題結尾的程式代碼 範例 。
static const time_zone* default_zone();
傳回值
如果未提供範本自變數,則範本特製化會提供 zoned_traits<const time_zone*>
,這會傳回 UTC 時區。 否則,它會傳回樣板自變數 T
所提供的預設時區。
locate_zone
傳 time_zone
回指定時區的指標。 如需此運作方式的詳細資訊,請參閱本主題結尾的程式代碼 範例 。
static const time_zone* locate_zone(string_view name);
範本參數
name
要尋找的時區名稱。 例如: "UTC"
。
傳回值
如果您建 zoned_traits
構 時未提供自訂時區指標的樣板自變數,則傳回值為 std::chrono::locate_zone(name)
。 否則,它會傳回 樣板自變數 T
中所定義的 值locate_zone()
。
範例: zoned_traits
下列範例示範如何使用 zoned_traits
來提供自定義的預設時區。
首先, CustomTimeZonePtr
會定義 ,其會透過 operator->()
提供自定義時區類型的指標。
然後, zoned_traits
會宣告 ,其中 default_zone
定義以傳回自定義預設時區。 在此情況下,南極。
在範例中, zoned_traits<CustomTimeZonePtr>::locate_zone()
將指定的時區名稱傳遞至 std::chrono::locate_zone()
。 此函式是您可以將自定義時區名稱對應至另一個時區的位置。
最後, stdZT
會定義 ,它會使用標準 time_zone
指標,因為它未提供樣板自變數,因此會使用提供 const std::chrono::time_zone*
的特殊化。
執行此範例以查看使用自定義,然後執行 zoned_time
標準 time_zone
指標。
// 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