tzdb 结构

表示时区数据库的副本。

语法

struct tzdb; // C++20

备注

表示 IANA(Internet 分配号码颁发机构)时区数据库的副本。 数据库包含有关每个时区及其本地时间调整历史记录的信息。 有关数据库的详细信息,请参阅时区数据库

成员

成员 说明
leap_seconds 经过排序的 vector<leap_second>leap_second 提供过去添加闰秒的时间历史记录。
links 经过排序的 vector<time_zone_link>time_zone_link 为给定时区提供备用名称。
version 包含数据库版本的 std::string
zones 经过排序的 vector<time_zone>time_zone 具有特定区域的时区规则的完整历史记录。

有关如何使用这些成员的示例,请参阅本主题末尾的示例:leap_secondslinkszones

成员函数

名称 描述
current_zone 获取本地时区。
locate_zone 获取指定时区。

current_zone

获取计算机的本地时区。

time_zone* current_zone() const; // C++20

返回值

指向 time_zone 的指针,表示计算机的本地时区。

示例: current_zone

此示例演示获取当前时区。

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    auto& db = get_tzdb();
    std::cout << "Current zone: " << db.current_zone()->name();
    
    return 0;
}
Current zone: America/Los_Angeles

locate_zone

获取指定时区。

const time_zone* locate_zone(string_view name) const;

示例: locate_zone

此示例演示按名称获取时区。

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    auto& db = get_tzdb();
    std::cout << "Locate zone : " << db.locate_zone("America/New_York")->name() << "\n";
    
    return 0;
}
Locate zone : America/New_York

此示例演示使用各种 tzdb 数据成员。

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    std::cout << "Leap seconds:\n";
    std::for_each(db.leap_seconds.begin(), db.leap_seconds.end(),
        [](const leap_second& ls)
        {
            std::cout << ls.date() << "\n";
        });

    std::cout << "Links:\n";
    std::for_each(db.links.begin(), db.links.end(),
        [](const time_zone_link& l)
        {
            std::cout << "Name: " << l.name() << "\t\tTarget:" << l.target() << '\n';
        });

    std::cout << "\nTime Zone descriptions:\n";
    std::for_each(db.zones.begin(), db.zones.end(),
        [](const time_zone& z)
        {
            std::cout << "Zone: " << z.name() << "\n";
        });
    
    return 0;
}
Leap seconds:
1972-07-01 00:00:00
1973-01-01 00:00:00
1974-01-01 00:00:00
...
Links:
Name: ACT               Target:Australia/Darwin
Name: AET               Target:Australia/Sydney
Name: AGT               Target:America/Buenos_Aires
Name: ART               Target:Africa/Cairo
...
Time Zone descriptions:
Zone: Africa/Abidjan
Zone: Africa/Accra
Zone: Africa/Addis_Ababa
...

要求

标头<chrono>

命名空间std::chrono

编译器选项: /std:c++latest

另请参阅

<chrono>
tzdb_list
time_zone_link
头文件引用