Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
A zoned_time is a pairing of a time_zone and a time_point. It gives a time_point meaning within a specific time zone.
Syntax
template<class Duration, class TimeZonePtr = const time_zone*>
class zoned_time ; // C++20
Remarks
A zoned_time always refers to a valid time zone and represents a point in time that exists and isn't ambiguous in that time zone.
Members
| Name | Description |
|---|---|
| Constructors | Construct a zoned_time. |
get_info |
Uses the time zone in this zoned_time to get information about the time point in the zoned_time. |
get_local_time |
Combines the time zone in the zoned_time with the stored time point to produce the local time in that time zone. |
get_sys_time |
Gets the time point stored in this zoned_time without applying the time zone. |
get_time_zone |
Gets the time_zone stored in this zoned_time. |
operator= |
Assign the value of another zoned_time, or another zoned_time's local_time or sys_time, to this zoned_time. |
operator local_time |
Combines the zoned_time's time zone with the stored time point to produce the local time in that time zone. |
operator sys_time |
Gets the time stored in this zoned_time without applying the time zone. |
Non-members
| Name | Description |
|---|---|
operator== |
Determine whether two zoned_time instances are equal. |
operator<< |
Output a zoned_time to the given stream. |
Convenience type aliases
| Name | Description |
|---|---|
zoned_seconds |
A synonym for zoned_time<seconds>; |
zoned_time::duration |
A duration measured in seconds. It's a synonym for common_type_t<Duration, seconds>; |
Requirements
Header: <chrono>
Microsoft C++ supports the zoned_time class starting in Visual Studio 2019 version 16.10.
Time-zone data is only available for Windows 10 version 1903/19H1 and later, and Windows Server 2022 and later.
Namespace: std::chrono
Compiler Option: /std:c++latest
Constructors
Construct a zoned_time.
1) zoned_time();
2) zoned_time(const zoned_time& zt) = default;
3) explicit zoned_time(TimeZonePtr z);
4) zoned_time(const sys_time<Duration>& st);
5) explicit zoned_time(string_view name);
6) zoned_time(TimeZonePtr z, const local_time<Duration>& tp);
7) zoned_time(TimeZonePtr z, const local_time<Duration>& tp, choose c);
8) zoned_time(TimeZonePtr z, const sys_time<Duration>& st);
9) zoned_time(string_view name, const local_time<Duration>& tp);
10) zoned_time(string_view name, const local_time<Duration>& tp, choose c);
11) zoned_time(string_view name, const sys_time<Duration>& st);
12) template<class Duration, class TimeZonePtr> zoned_time(string_view name, const zoned_time<Duration>& y);
13) template<class Duration, class TimeZonePtr> zoned_time(string_view name, const zoned_time<Duration>& y, choose c);
14) template<class Duration> zoned_time(const zoned_time<Duration, TimeZonePtr>& y);
15) template<class Duration, class TimeZonePtr> zoned_time(TimeZonePtr z, const zoned_time<Duration, TimeZonePtr>& y);
16) template<class Duration, class TimeZonePtr> zoned_time(TimeZonePtr z, const zoned_time<Duration, TimeZonePtr>& y, choose);
Parameters
c
Indicates how to handle ambiguous or nonexistent local times when converting a local_time to a sys_time. For more information, see choose enum.
name
The name of a time zone.
st
A sys_time with a specified duration. Used to set the time.
tp
A local_time with a specified duration. Used to set the time.
y
A zoned_time copied to construct a new zoned_time.
z
A time_zone that is std::move(z)'d into the constructed zoned_time.
zt
A zoned_time pointer that is std::move(zt)'d into the constructed zoned_time.
Remarks
1) Initializes the time zone with traits::default_zone(), and default constructs the time point.
2) The default copy constructor.
3) Initializes the time zone with std::move(z), and default constructs the time point.
4) Initializes the time zone with traits::default_zone(), and the time with st.
5) Initializes the time zone with traits::locate_zone(name) and default constructs the time point.
6) Initializes the time zone with std::move(z), and the time by converting tp as though by z->to_sys(tp).
7) Initializes the time zone with std::move(z), and the time as though by z->to_sys(tp, c). See choose enum for how the parameter c affects the outcome.
8) Initializes the time zone with std::move(z), and the time with st.
9) Equivalent to construction with {traits::locate_zone(name), tp}.
10) Equivalent to construction with {traits::locate_zone(name), tp, c}.
11) Equivalent to construction with {traits::locate_zone(name), st}.
12) Equivalent to construction with {traits::locate_zone(name), y}.
13) Equivalent to construction with {traits::locate_zone(name), y, c}. The choose parameter, c, has no effect.
14) Initializes the time zone from y's time zone and time point.
15) Initializes the time zone with std::move(z) and the time from y's time point.
16) Equivalent to construction with {z, y}. The choose parameter, c, has no effect.
Note
zoned_time doesn't have a move constructor. Trying to move it results in a copy using the default copy constructor.
Example: construct a zoned_time
The following shows how to create a zoned_time instance for the time zone "Antarctica/Casey", on 9/15/2021 at 4:45pm:
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
std::cout << zt;
return 0;
}
2021-09-16 03:45:00 GMT+11
get_info
Uses the time zone in this zoned_time to get information about the time point in the zoned_time.
sys_info get_info() const;
Return value
A sys_info that contains the UTC offset for the time zone and time, the daylight savings time adjustment offset, and so on.
Example: get_info
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
sys_info si = zt.get_info();
std::cout << si;
return 0;
}
begin: 2020-10-03 16:01:00, end: 32767-12-31 23:59:59, offset: 39600s, save: 0min, abbrev: GMT+11
get_local_time
Gets a local_time<duration> that represents the local time given this zoned_time's time zone and time point.
local_time<duration> get_local_time() const;
Return value
The returned local_time is a synonym for time_point<local_t, duration>.
Example: get_local_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
std::cout << zt.get_info();
return 0;
}
2021-09-16 03:45:00
get_sys_time
Gets the time stored in the zoned_time for the system_clock.
sys_time<duration> get_sys_time() const;
Return value
The time stored in this zoned_time, without any adjustment for time zone. It represents the system-wide wall clock time as a time_point. The returned sys_time is a synonym for template <class Duration> time_point<system_clock Duration>;
Example: get_sys_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
std::cout << zt.get_sys_time();
return 0;
}
2021-09-15 16:45:00
get_time_zone
Gets the time zone stored in this zoned_time.
TimeZonePtr get_time_zone() const;
Return value
A pointer to the time_zone stored in this zoned_time.
Example: get_time_zone
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
auto pTZ = zt.get_time_zone();
std::cout << pTZ->name();
return 0;
}
Antarctica/Casey
operator=
Assign another zoned_time to this one. Or assign just the other zoned_time's sys_time or local_time.
1) zoned_time& operator=(const zoned_time& zt) = default;
2) zoned_time& operator=(const sys_time<Duration>& st);
3) zoned_time& operator=(const local_time<Duration>& lt);
Parameters
zt
The zoned_time to assign to this one.
st
The sys_time to assign to the stored time_point in this zoned_time.
lt
The local_time to assign to the stored time_point in this zoned_time.
Return value
*this
Example: operator=
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt1{}, zt2("Pacific/Galapagos", sys_days{2021y/September/15d} + 16h + 45min);
std::cout << zt2.get_local_time() << "\n";
zt1 = zt2.get_local_time();
std::cout << zt1.get_local_time();
return 0;
}
2021-09-15 10:45:00
2021-09-15 10:45:00
Remarks
1) The default copy assignment operator. Copies (doesn't move) the stored time_point and time_zone pointer from the other zoned_time into this zoned_time.
2) Assigns st to the time_point in this zoned_time. After the assignment, *this->get_sys_time() == st;
3) Converts lt (a local_time) to a sys_time. It does this essentially as timeZone->to_sys(lt), and assigns the result to the time_point in this zoned_time. After the assignment, *this->get_local_time() == lt;
operator local_time
Combines the zoned_time's time zone with the stored time point to produce the local time in that time zone.
explicit operator local_time<duration>() const;
Return value
A time_point<local_t, Duration> that represents the local time for the time and time zone in this zoned_time. You can use the convenience alias local_time to represent a value returned by this function.
The return value is effectively timeZone->to_local(get_sys_time());
Example: operator local_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Pacific/Galapagos", sys_days{ 2021y / September / 15d } + 16h + 45min);
std::cout << (local_time<seconds>)zt;
return 0;
}
2021-09-15 10:45:00
operator sys_time
Gets the time point stored in this zoned_time without applying the time zone.
operator sys_time<duration>() const;
Return value
The time stored in this zoned_time, without any adjustment for time zone. The returned sys_time is a synonym for template <class Duration> time_point<system_clock Duration>; and represents the same point in time that is stored in this zoned_time.
Example: operator sys_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Pacific/Galapagos", sys_days{2021y/September/15d} + 16h + 45min);
std::cout << (sys_time<seconds>)zt;
return 0;
}
2021-09-15 16:45:00
See also
<chrono>
time_point
time_zone
zoned_traits struct
Header files reference