共用方式為


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

另請參閱

<chrono>
time_zone
zoned_time 類別
標頭文件參考