std::chrono::zoned_time<Duration,TimeZonePtr>::zoned_time

来自cppreference.com
< cpp‎ | chrono‎ | zoned time
 
 
工具库
语言支持
类型支持(基本类型、RTTI)
库功能特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)

 
 
 
zoned_time();
(1) (C++20 起)
zoned_time( const std::chrono::sys_time<Duration>& st );
(2) (C++20 起)
zoned_time( const zoned_time& other ) = default;
(3) (C++20 起)
template< class Duration2 >
zoned_time( const std::chrono::zoned_time<Duration2, TimeZonePtr>& other );
(4) (C++20 起)
explicit zoned_time( TimeZonePtr z );
(5) (C++20 起)
explicit zoned_time( std::string_view name );
(6) (C++20 起)
zoned_time( TimeZonePtr z, const std::chrono::sys_time<Duration>& st );
(7) (C++20 起)
zoned_time( std::string_view name, const std::chrono::sys_time<Duration>& st );
(8) (C++20 起)
zoned_time( TimeZonePtr z, const std::chrono::local_time<Duration>& tp );
(9) (C++20 起)
zoned_time( std::string_view name, const std::chrono::local_time<Duration>& tp );
(10) (C++20 起)
zoned_time( TimeZonePtr z, const std::chrono::local_time<Duration>& tp,
            std::chrono::choose c );
(11) (C++20 起)
zoned_time( std::string_view name,
            const std::chrono::local_time<Duration>& tp, std::chrono::choose c );
(12) (C++20 起)
template< class Duration2, class TimeZonePtr2 >

zoned_time( TimeZonePtr z,

            const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt );
(13) (C++20 起)
template< class Duration2, class TimeZonePtr2 >

zoned_time( TimeZonePtr z,
            const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt,

            std::chrono::choose );
(14) (C++20 起)
template< class Duration2, class TimeZonePtr2 >

zoned_time( std::string_view name,

            const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt );
(15) (C++20 起)
template< class Duration2, class TimeZonePtr2 >

zoned_time( std::string_view name,
            const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt,

            std::chrono::choose );
(16) (C++20 起)

构造 zoned_time 对象,按照下表初始化存储的时区指针和时间点,其中 traitsstd::chrono::zoned_traits<TimeZonePtr>

重载 时区指针(记为 zone 时间点(std::chrono::sys_time<duration> 注解
(1) traits::default_zone() 默认构造 (a)
(2) st
(3) other.get_time_zone() other.get_sys_time() (b)
(4) other.get_time_zone() other.get_sys_time() (e)
(5) std::move(z) 默认构造
(6) traits::locate_zone(name) (c)
(7) std::move(z) st
(8) traits::locate_zone(name) (c)
(9) std::move(z) zone->to_sys(tp) (d)
(10) traits::locate_zone(name) (c,d)
(11) std::move(z) zone->to_sys(tp, c) (d)
(12) traits::locate_zone(name) (c,d)
(13,14) std::move(z) zt.get_sys_time() (e)
(15,16) traits::locate_zone(name) (c,e)
a)traits::default_zone() 非良构,则指定来调用该表达式的构造函数 (1,2) 不参与重载决议。
b)std::is_copy_constructible_v<TimeZonePtr> 为 false 则预置的复制构造函数 (3) 被定义为弃置。
c)traits::locate_zone(name) 非良构或若该表达式不可转换成 TimeZonePtr,则带 std::string_view 形参 name 的构造函数 (6,8,10,12,15-16) 不参与重载决议。
d)zone->to_sys 非良构或其结果不可转换成 std::chrono::sys_time<duration>,则指定来调用该调用表达式的构造函数 (9-12) 不参与重载决议。
e)Duration2 不可转换成 Duration,则带模板形参 Duration2 的构造函数 (4,13-16) 不参与重载决议。

若(按上述方式初始化的)时区指针不指代合法时区,则行为未定义。

注解

zoned_time 无移动构造函数,而移动它的尝试将代之以用预置的复制构造函数 (3) 进行复制。从而当 TimeZonePtr 是仅移动的类型时,zoned_time 不可移动:既不能复制亦不能移动它。

构造函数 (14,16) 接受 std::chrono::choose 形参,但该形参无效果。

Example

#include <chrono>
#include <iostream>
#include <string_view>
 
int main()
{
    using std::chrono_literals::operator""y;
    using std::operator""sv;
 
    std::cout << std::chrono::zoned_time{} << " : default\n";
 
    constexpr std::string_view location1{"America/Phoenix"sv};
    std::cout << std::chrono::zoned_time{location1} << " : " << location1 << '\n';
 
    const std::chrono::time_zone* timeZonePtr = std::chrono::locate_zone("UTC");
    std::cout << std::chrono::zoned_time{timeZonePtr} << " : UTC time zone\n";
 
    constexpr auto location2{"Europe/Rome"sv};
    std::cout << std::chrono::zoned_time{location2, std::chrono::local_days{2021y/12/31}}
              << " : " << location2 << '\n';
 
    constexpr auto location3{"Europe/Rome"sv};
    constexpr auto some_date = std::chrono::sys_time<std::chrono::days>{2021y/12/31};
    std::cout << std::chrono::zoned_time{location3, some_date}
              << " : " << location3 << '\n';
 
    const auto now =
        std::chrono::floor<std::chrono::minutes>(std::chrono::system_clock::now());
    constexpr auto location4{"Europe/Rome"sv};
    std::cout << std::chrono::zoned_time{location4, now} << " : " << location4 << '\n';
 
    constexpr auto NewYork{"America/New_York"sv};
    constexpr auto Tokyo{"Asia/Tokyo"sv};
    const std::chrono::zoned_time tz_Tokyo{Tokyo, now};
    const std::chrono::zoned_time tz_NewYork{NewYork, now};
    std::cout << std::chrono::zoned_time{Tokyo, tz_NewYork} << " : " << Tokyo << '\n';
    std::cout << std::chrono::zoned_time{NewYork, tz_Tokyo} << " : " << NewYork << '\n';
}

可能的输出:

1970-01-01 00:00:00 UTC : default
1969-12-31 17:00:00 MST : America/Phoenix
1970-01-01 00:00:00 UTC : UTC time zone
2021-12-31 00:00:00 CET : Europe/Rome
2021-12-31 01:00:00 CET : Europe/Rome
2021-09-20 23:04:00 CEST : Europe/Rome
2021-09-21 06:04:00 JST : Asia/Tokyo
2021-09-20 17:04:00 EDT : America/New_York