On this page
std::chrono::zoned_time<Duration,TimeZonePtr>::zoned_time
|
(1) | (since C++20) |
|
(2) | (since C++20) |
|
(3) | (since C++20) |
|
(4) | (since C++20) |
|
(5) | (since C++20) |
|
(6) | (since C++20) |
|
(7) | (since C++20) |
|
(8) | (since C++20) |
|
(9) | (since C++20) |
|
(10) | (since C++20) |
|
(11) | (since C++20) |
|
(12) | (since C++20) |
|
(13) | (since C++20) |
|
(14) | (since C++20) |
|
(15) | (since C++20) |
|
(16) | (since C++20) |
Constructs a zoned_time
object, initializing the stored time zone pointer and time point according to the following table, where traits
is std::chrono::zoned_traits<TimeZonePtr>
:
Overload | Time zone pointer (denoted zone ) |
Time point (a std::chrono::sys_time<duration> ) |
Notes |
---|---|---|---|
(1) | traits::default_zone() |
default constructed | (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) |
default constructed | |
(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) |
traits::default_zone()
(1,2) do not participate in overload resolution if that expression is not well-formed.
std::is_copy_constructible_v<TimeZonePtr>
is false.
std::string_view
parameter name
(6,8,10,12,15,16) do not participate in overload resolution if traits::locate_zone(name)
is not well-formed or if that expression is not convertible to TimeZonePtr
.
zone->to_sys
(9-12) do not participate in overload resolution if that call expression is not well-formed or if the result is not convertible to std::chrono::sys_time<duration>
.
Duration2
(4,13-16) do not participate in overload resolution if Duration2
is not convertible to Duration
.
The behavior is undefined if the time zone pointer (initialized as described above) does not refer to a time zone.
Notes
zoned_time
does not have a move constructor and attempting to move one will perform a copy instead using the defaulted copy constructor (3). Thus, when TimeZonePtr
is a move-only type, zoned_time
is immovable: it can be neither moved nor copied.
The constructors (14,16) accept a std::chrono::choose
parameter, but that parameter has no effect.
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';
}
Possible output:
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
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/chrono/zoned_time/zoned_time