zoned_time
class
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