<chrono>
Операторов
operator+
Оператор добавления для следующих типов:
day
duration
month
time_point
weekday
year
year_month
year_month_day
year_month_day_last
year_month_weekday
year_month_weekday_last
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type
operator+(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Rep2, class Period2>
constexpr time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type>
operator+(
const time_point<Clock, Duration1>& Time,
const duration<Rep2, Period2>& Dur);
3)
template <class Rep1, class Period1, class Clock, class Duration2>
time_point<Clock, constexpr typename common_type<duration<Rep1, Period1>, Duration2>::type>
operator+(
const duration<Rep1, Period1>& Dur,
const time_point<Clock, Duration2>& Time);
4)
constexpr day operator+(const day& d, const days& ds) noexcept; // C++20
constexpr day operator+(const days& ds, const day& d) noexcept; // C++20
5)
constexpr month operator+(const month& m, const months& ms) noexcept; // C++20
constexpr month operator+(const months& ms, const month& m) noexcept; // C++20
6)
constexpr weekday operator+(const weekday& wd, const days& wds) noexcept // C++20
constexpr weekday operator+(const days& ds, const weekday& wd) noexcept; // C++20
7)
constexpr year operator+(const year& y, const years& ys) noexcept; // C++20
constexpr year operator+(const years& ys, const year& y) noexcept; // C++20
8)
constexpr year_month operator+(const year_month& ym, const months& dm) noexcept; // C++20
constexpr year_month operator+(const months& dm, const year_month& ym) noexcept; // C++20
constexpr year_month operator+(const year_month& ym, const years& dy) noexcept; // C++20
constexpr year_month operator+(const years& dy, const year_month& ym) noexcept; // C++20
9)
constexpr year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept; // C++20
constexpr year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept; // C++20
constexpr year_month_day operator+(const year_month_day& ymd, const years& dy) noexcept; // C++20
constexpr year_month_day operator+(const years& dy, const year_month_day& ymd) noexcept; // C++20
10)
constexpr year_month_day_last operator+(const year_month_day_last& ymdl, const months& dm) noexcept; // C++20
11)
constexpr year_month_day_last operator+(const months& dm, const year_month_day_last& ymdl) noexcept; // C++20
12)
constexpr year_month_day_last operator+(const year_month_day_last& ymdl, const years& dy) noexcept; // C++20
constexpr year_month_day_last operator+(const years& dy, const year_month_day_last& ymdl) noexcept; // C++20
13)
constexpr year_month_weekday operator+(const year_month_weekday& ymwd, const months& dm) noexcept; // C++20
constexpr year_month_weekday operator+(const months& dm, const year_month_weekday& ymwd) noexcept; // C++20
14)
constexpr year_month_weekday operator+(const year_month_weekday& ymwd, const years& dy) noexcept; // C++20
15)
constexpr year_month_weekday operator+(const years& dy, const year_month_weekday& ymwd) noexcept; // C++20
16)
constexpr year_month_weekday_last operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept; // C++20
constexpr year_month_weekday_last operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept; // C++20
17)
constexpr year_month_weekday_last operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept; // C++20
constexpr year_month_weekday_last operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept; // C++20
Возвращаемое значение
1) После преобразования Left
и Right
их общего типа возвращает duration
значение с числом галок, равным сумме преобразованного числа галок.
2-3) Возвращает time_point
объект, представляющий точку во времени, которая перемещается интервалом Dur
с точки во времени Time
.
4) Возвращает результат d+ds.count()
. Если результат выходит из диапазона [0, 255], результат не указан.
5) Возвращает результат m+ms.count()
. Если результат выходит из диапазона [1, 12], он уменьшается модуло 12, а затем +1.
6) Возвращает результат добавления числа дней и будней в число weekday
. Результат будет 7, поэтому всегда в диапазоне [0,6]
7) Возвращает результат добавления года к указанному количеству лет.
8) Возвращает результат добавления количества месяцев и лет в указанный месяц и год.
9) Возвращает результат добавления месяцев или лет в year_month_day
. Если ymd.month()
он February
ymd.day()
не находится в диапазоне [1d, 28d], ok()
может вернуться false
к результату добавления.
10) Возвращает (ymdl.year() / ymdl.month() + dm) / last
. Примечание. Используемый /
здесь оператор не является оператором деления. Это оператор даты.
11) Возвращает ymdl + dm
.
12) Возвращает {ymdl.year()+dy, ymdl.month_day_last()}
13) Возвращается ymwd + dm.count()
.
14-15) Возвращается {ymwd.year()+dy, ymwd.month(), ymwd.weekday_indexed()}
.
16) Возвращает (ymwdl.year() / ymwdl.month() + dm) / ymwdl.weekday_last()
. Примечание. Используемый /
здесь оператор не является оператором деления, а оператором даты.
17) Возвращает: ymwdl + dy
Пример: operator+
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
// day
day d{1};
std::cout << d + days(2) << '\n'; // 03
// month
month m{11};
std::cout << m + months(3)<< '\n'; // Feb
// weekday
weekday wd = Thursday;
std::cout << wd + days(1) << '\n'; // Fri
// year_month_day_last
year_month_day_last ymdl{June / last / 2021};
std::cout << ymdl + years{1} + months{1} << '\n'; // 2022/Jul/last
// year_month_weekday
year_month_weekday ymw{ year(1997) / January / Wednesday[1] };
std::cout << ymw + months{1} << '\n'; // 1997/Feb/Wed[1]
std::cout << ymw + years{1} << '\n'; // 1998/Jan/Wed[1]
// year_month_weekday_last
year_month_weekday_last ymwl{ year(1997) / January / Wednesday[last] };
std::cout << ymwl + months{ 1 } << '\n'; // 1997/Feb/Wed[last]
std::cout << ymwl + years{ 1 } << '\n'; // 1998/Jan/Wed[last]
return 0;
}
03
Feb
Fri
2022/Jul/last
1997/Feb/Wed[1]
1998/Jan/Wed[1]
1997/Feb/Wed[last]
1998/Jan/Wed[last]
Одинарный operator+
Примените унарный плюс к следующим типам:
// duration
constexpr common_type_t<duration> operator+() const // C++20
Возвращаемое значение
Возвращает *this
.
operator-
Оператор вычитания для следующих типов:
day
duration
month
time_point
weekday
year
year_month
year_month_day
year_month_day_last
year_month_weekday
year_month_weekday_last
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type
operator-(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Rep2, class Period2>
constexpr time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type
operator-(
const time_point<Clock, Duration1>& Time,
const duration<Rep2, Period2>& Dur);
3)
template <class Clock, class Duration1, class Duration2>
constexpr typename common_type<Duration1, Duration2>::type
operator-(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
4)
constexpr day operator-(const day& d, days& ds) noexcept; // C++20
constexpr day operator-(const day& d, const day& d) noexcept; // C++20
5)
constexpr month operator-(const month& m, const months& ms) noexcept; // C++20
constexpr month operator-(const month& m, const month& ms) noexcept; // C++20
6)
constexpr months operator-(const year_month& Left, const year_month& Right) noexcept; // C++20
7)
constexpr weekday operator-(const weekday& Left, const days& Right) noexcept; // C++20
8)
constexpr days operator-(const weekday& Left, const weekday& Right) noexcept; // C++20
9)
constexpr year operator-(const year& y, const years& ys) noexcept; // C++20
10)
constexpr years operator-(const year& y, const year& y2) noexcept; // C++20
11)
constexpr year_month operator-(const year_month& ym, const months& dm) noexcept; // C++20
constexpr year_month operator-(const year_month& ym, const years& dy) noexcept; // C++20
12)
constexpr year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept; // C++20
constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept; // C++20
13)
constexpr year_month_day_last operator-(const year_month_day_last& ymdl, const months& dm) noexcept; // C++20
14)
constexpr year_month_day_last operator-(const year_month_day_last& ymdl, const years& dy) noexcept; // C++20
15)
constexpr year_month_weekday operator-(const year_month_weekday& ymwd, const months& dm) noexcept; // C++20
16)
constexpr year_month_weekday operator-(const year_month_weekday& ymwd, const years& dy) noexcept; // C++20
17)
constexpr year_month_weekday_last operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept; // C++20
18)
constexpr year_month_weekday_last operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept; // C++20
Возвращаемое значение
1) После преобразования длительности, вычитаемой в их общий тип, возвращает duration
значение с числом галок, равным количеству тиков, Right
вычитаемых из числа тиков.Left
2) Возвращает значение time_point
, представляющее точку во времени, которая перемещается с помощью отрицания интервала времени, представленного Dur
в точке во времени, указанной в параметре Time
.
3) Возвращает duration
объект, представляющий интервал времени между Left
и Right
.
4) Возвращает результат d-ds.count()
. Если результат выходит из диапазона [0, 255], результат не указан.
5) Если m.ok() == true
и ms.ok() == true
, возвращает результат вычитания двухмесячных значений или вычитания числа месяцев. Результат будет находиться в диапазоне [1, 12]. Если результат отрицательный, он обертывается вокруг. Например, вычитание одного месяца с января (month m1{1} - months{1};
12 декабря).
6) Возвращает разницу в месяцах между Left
и Right
7) Если Left.ok() == true
и Right.ok() == true
, возвращается weekday
в диапазоне [days{0}
, days{6}
].
8) Возвращает количество дней между двумя рабочими днями.
9) Возвращает year(int(y)-ys.count)())
10) Возвращает years(int(y) - int(y2))
. Вычитание двух year
значений приводит к std::chrono::years
тому, что разница в годах между y
и y2
. Например, 2021y-2000y
выдает years(21)
.
11) Возвращает результат вычитания месяцев или лет из year_month
значения.
12) Возвращает результат вычитания месяцев из year_month_day
значения.
13) Возвращает результат вычитания количества месяцев из year_month_day_last
значения. По существу: ymdl-dm
.
14) Возвращает результат вычитания количества лет из year_month_day_last
значения. По существу: ymdl-dy
.
15) Возвращает результат вычитания количества месяцев из year_month_weekday
значения. По существу: ymwd-dm
.
16) Возвращает результат вычитания количества лет из year_month_weekday
значения. По существу: ymwd-dy
.
17) Возвращает результат вычитания количества месяцев из year_month_weekday_last
значения. По существу: ymwdl-dm
.
18) Возвращает результат вычитания количества лет из year_month_weekday_last
значения. По существу: ymwdl-dy
.
Пример: operator-
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
// day
day d{10};
d = d - days(5);
std::cout << d << '\n'; // 05
// month
month m{2};
m = m - months{1};
std::cout << m << '\n'; // Jan
m = m - months{1};
std::cout << m << '\n'; // Dec
// year
auto diff1 = 2021y-2000y;
auto diff2 = 2021y-years{1};
std::cout << diff1.count() << '\n'; // 21
std::cout << diff2 << '\n'; // 2020
// year_month
const year theYear{ 2021 };
year_month ym1{theYear, June};
year_month ym2 = ym1 - months{2};
std::cout << ym2 << '\n'; // 2021/Apr
year_month ym3 = ym1 - years{2};
std::cout << ym3 << '\n'; // 2019/Jun
// year_month_day_last
year_month_day_last ymdl = June / last / 2021;
std::cout << ymdl - years{1} - months{1} << '\n'; // 2022/Jul/last
// year_month_weekday
year_month_weekday ymw{ year(1997) / January / Wednesday[1] };
std::cout << ymw - months{1} << '\n'; // 1996/Dec/Wed[1]
std::cout << ymw - years{1} << '\n'; // 1996/Jan/Wed[1]
// year_month_weekday_last
year_month_weekday_last ymwl{ year(1997) / January / Wednesday[last] };
std::cout << ymwl - months{ 1 } << '\n'; // 1996/Dec/Wed[last]
std::cout << ymwl - years{ 1 } << '\n'; // 1996/Jan/Wed[last]
return 0;
}
05
Jan
Dec
21
2020
2021/Apr
2019/Jun
2020/May/last
1996/Dec/Wed[1]
1996/Jan/Wed[1]
1996/Dec/Wed[last]
1996/Jan/Wed[last]
Одинарный operator-
Отрицает duration
.
constexpr common_type_t<duration> operator-() const;
Возвращаемое значение
Возвращает отрицаемую копию *this
Пример: унарный operator-
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
duration<int, std::milli> milliseconds(120);
std::cout << -milliseconds << '\n';
return 0;
}
-120ms
operator!=
Определяет, следует ли:
1) Два duration
объекта не представляют одинаковое количество галок.
2) Два time_point
объекта не представляют один и тот же момент времени.
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr bool operator!=(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Duration2>
constexpr bool operator!=(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
Параметры
Left
Левый объект duration
или объект time_point
.
Right
Правый объект duration
или объект time_point
.
Возвращаемое значение
1) Возвращает значение true
, если число тиков для типа общего Left
Right
и не равно. В противном случае возвращается false
.
2) Возвращает, true
если два time_point
объекта не представляют одинаковый момент времени. В противном случае возвращается false
.
operator*
Оператор умножения для объектов duration
. После преобразования duration
преобразуемых значений с умножением на их общий тип возвращает duration
значение с числом галок, равным умножению преобразованного числа галок.
1)
template <class Rep1, class Period1, class Rep2>
constexpr duration<typename common_type<Rep1, Rep2>::type, Period1>
operator*(
const duration<Rep1, Period1>& Dur,
const Rep2& Mult);
2)
template <class Rep1, class Rep2, class Period2>
constexpr duration<typename common_type<Rep1, Rep2>::type, Period2>
operator*(
const Rep1& Mult,
const duration<Rep2,
Period2>& Dur);
Параметры
Dur
Объект duration
.
Mult
Целочисленное значение.
Возвращаемое значение
duration
Возвращает объект, длина интервала которого умножается Mult
на длинуDur
.
1) Если is_convertible<Rep2, common_type<Rep1, Rep2>>
не содержится true
, эта функция не участвует в разрешении перегрузки. Дополнительные сведения см. в type_traits><.
2) Если is_convertible<Rep1, common_type<Rep1, Rep2>>
не содержится true
, эта функция не участвует в разрешении перегрузки. Дополнительные сведения см. в type_traits><.
operator<
1) После преобразования duration
s по сравнению с их общим типом определяет, меньше ли количество клещей Left
для Right
.
2) Определяет, находится ли точка во времени с эпохи Left
time_point
меньше времени с эпохи.Right
time_point
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr bool operator<(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Duration2>
constexpr bool operator<(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
Параметры
Left
Левый объект duration
или объект time_point
.
Right
Правый объект duration
или объект time_point
.
Возвращаемое значение
1) Возвращает true
, если число галок Left
для меньше числа тиков Right
. В противном случае функция возвращает значение false
.
2) Возвращается true
, если Left
предшествует Right
. В противном случае возвращается false
.
operator<=
1) После преобразования duration
s по сравнению с их общим типом определяет, меньше ли число клещей Left
для меньшего числа или совпадает Right
.
2) Определяет, является ли точка во времени эпохи Left
time_point
меньше или равной времени с момента эпохи time_point
в Right
.
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr bool operator<=(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Duration2>
constexpr bool operator<=(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
Параметры
Left
Левый объект duration
или объект time_point
.
Right
Правый объект duration
или объект time_point
.
Возвращаемое значение
1) Возвращает true
, если число галок Left
меньше или равно количеству тиков Right
. В противном случае функция возвращает значение false
.
2) Возвращается true
, если Left
предшествует или равно, Right
. В противном случае возвращается false
.
operator==
Определяет, следует ли:
1) duration
объекты представляют интервалы времени с одинаковой длиной.
2) time_point
объекты представляют тот же момент времени.
3) day
объекты представляют тот же день.
4) month
объекты представляют тот же месяц.
5) month_day
объекты представляют один месяц и день.
6) month_day_last
объекты представляют тот же месяц.
7) month_weekday
объекты представляют тот же месяц и nth weekday.
8) month_weekday_last
объекты представляют тот же месяц и последний день недели.
9) weekday
объекты представляют тот же день недели.
10) weekday_last
объекты представляют тот же последний день недели месяца.
11) weekday_indexed
представляет тот же индекс дня недели.
12) year
представляет тот же год.
13) year_month
представляет один и тот же год и месяц.
14) year_month_day
представляет один и тот же год, месяц и день.
15) year_month_day_last
представляет тот же последний день года и месяца.
16) year_month_weekday
представляют тот же день недели, год и месяц.
17) year_month_weekday_last
представляют тот же последний день недели месяца, года и месяца.
18) time_zone_link
имеют то же самое name
. Имя target
не считается.
19) zoned_time
представляют одинаковый часовой пояс и часовой пояс.
// 1) duration<Rep, Period>
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr bool operator==(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
// 2) time_point
template <class Clock, class Duration1, class Duration2>
constexpr bool operator==(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
// 3) day
constexpr bool operator==(const day& Left, const day& Right) noexcept; // C++20
// 4) month
constexpr bool operator==(const month& Left, const month& Right) noexcept; // C++20
// 5) month_day
constexpr bool operator==(const month_day& Left, const month_day& Right) noexcept; // C++20
// 6) month_day_last
constexpr bool operator==(const month_day_last& Left, const month_day_last& Right) noexcept; // C++20
// 7) month_weekday
constexpr bool operator==(const month_weekday& Left, const month_weekday& Right) noexcept; // C++20
// 8) month_weekday_last
constexpr bool operator==(const month_weekday_last& Left, const month_weekday_last& Right) noexcept; // C++20
// 9) weekday
constexpr bool operator==(const weekday& Left, const weekday& Right) noexcept; // C++20
// 10) weekday_last
constexpr bool operator==(const weekday_last& Left, const weekday_last& Right) noexcept; // C++20
// 11) weekday_indexed
constexpr bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept; // C++20
// 12) year
constexpr bool operator==(const year& Left, const year& y ) noexcept; // C++20
// 13) year_month
constexpr bool operator==(const year_month& Left, const year_month& Right) noexcept; // C++20
// 14) year_month_day
constexpr bool operator==(const year_month_day& Left, const year_month_day& Right) noexcept; // C++20
// 15) year_month_day_last
constexpr bool operator==(const year_month_day_last& Left, const year_month_day_last& Right) noexcept; // C++20
// 16) year_month_weekday
constexpr bool operator==(const year_month_weekday& Left, const year_month_weekday& Right) noexcept; // C++20
// 17) year_month_weekday_last
constexpr bool operator==(const year_month_weekday_last& Left, const year_month_weekday_last& Right) noexcept; // C++20
// 18) time_zone_link
bool operator==(const time_zone_link& Left, const time_zone_link& Right) noexcept; // C++20
// 19) zoned_time
template <class Duration1, class Duration2, class TimeZonePtr>
bool operator==(const zoned_time<Duration1, TimeZonePtr>& Left, const zoned_time<Duration2, TimeZonePtr>& Right); // C++20
Параметры
Left
Левый объект для сравнения, например Left
== Right
Right
Правый из сравниваемых объектов.
Возвращаемое значение
1) Возвращает true
значение, если число тиков для типа общего Left
типа и Right
равно. В противном случае возвращается false
.
2) Возвращает значение true
, если Left
и Right
представляет тот же момент времени. В противном случае возвращается false
.
3-17) Возвращает true
значение, если Left
и Right
имеет то же значение. В противном случае возвращается false
.
18) Возвращает true
значение if Left.name() == Right.name()
. В противном случае возвращается *false*
.
19) Возвращается true
, если Left.get_time_zone() == _Right.get_time_zone() && Left.get_sys_time() == Right.get_sys_time();
operator>
1) После преобразования duration
s по сравнению с их общим типом определяет, больше ли число клещей Left
для Right
.
2) Определяет, является ли момент времени с эпохи Left
time_point
больше времени с момента эпохи.Right
time_point
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr bool operator>(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Duration2>
constexpr bool operator>(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
Параметры
Left
Левый объект duration
или объект time_point
.
Right
Правый объект duration
или объект time_point
.
Возвращаемое значение
1) Возвращает true
, если число галок Left
больше, чем число галок для Right
. В противном случае функция возвращает значение false
.
2) Возвращается true
, если Left
происходит после Right
. В противном случае возвращается false
.
operator>=
1) После преобразования duration
s по сравнению с их общим типом определяет, больше ли число тиков Left
больше или равно Right
.
2) Определяет, является ли точка во времени эпохи Left
time_point
больше или равной времени с момента эпохи time_point
в Right
.
1)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr bool operator>=(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
2)
template <class Clock, class Duration1, class Duration2>
constexpr bool operator>=(
const time_point<Clock, Duration1>& Left,
const time_point<Clock, Duration2>& Right);
Параметры
Left
Левый объект duration
или объект time_point
.
Right
Правый объект duration
или объект time_point
.
Возвращаемое значение
1) Возвращаетtrue
, если число галок Left
больше или равно количеству тиков.Right
В противном случае функция возвращает значение false
.
2) Возвращается true
, если Left
происходит после или равно, Right
. В противном случае возвращается false
.
operator<=>
Оператор космического корабля с operator==
синтезирует операторы для <
, <=
, >
>=
и !=
для следующих типов:
day
duration
month
month_day
month_day_last
time_point
time_zone_link
year
year_month
year_month_day_last
1)
constexpr bool operator<=>(const day& Left, const day& Right) noexcept; // C++20
constexpr std::strong_ordering operator<=>(const month& Left, const month& Right) noexcept; // C++20
constexpr strong_ordering operator<=>(const month_day& Left, const month_day& Right) noexcept; // C++20
constexpr std::strong_ordering operator<=>(const year& Left, const year& Right ) noexcept; // C++20
constexpr strong_ordering operator<=>(const year_month& Left, const year_month& Right) noexcept; // C++20
template<class Clock, class Duration1, three_way_comparable_with<Duration1> Duration2>
constexpr auto operator<=>(const time_point<Clock, Duration1>& Left, const time_point<Clock, Duration2>& Right); // C++20
template<class Rep1, class Period1, class Rep2, class Period2>
requires three_way_comparable<typename CT::rep>
constexpr auto operator<=>(const duration<Rep1, Period1>& Left, const duration<Rep2, Period2>& Right);
2)
constexpr strong_ordering operator<=>(const month_day_last& Left, const month_day_last& Right) noexcept;
3)
constexpr strong_ordering operator<=>(const year_month_day_last& Left, const year_month_day_last& Right) noexcept;
4)
strong_ordering operator<=>(const time_zone_link& Left, const time_zone_link& Right) noexcept;
Параметры
Left
, Right
, day
month
year_month
year_month_day
duration
month_day_last
year_month_day_last
month_day
time_point
time_zone_link
year
чтобы сравнить.
Возвращаемое значение
1)
0
если Left == Right
< 0
если Left < Right
> 0
если Left > Right
2)
Эквивалентно: Left.month() <=> Right.month()
3)
Эквивалентно:
if (auto c = Left.year() <=> Right.year(); c != 0) return c;
return Left.month_day_last() <=> Right.month_day_last();
4)
Эквивалентно:
Left.name() <=> Right.name()
Пример: operator<=>
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono; // for day and 'd' literals
int main()
{
day d1{3};
day d2{2};
if ((d1 <=> d2) == 0)
{
std::cout << "equal\n";
}
else if ((d1 <=> d2) < 0)
{
std::cout << "d1 < d2\n";
}
else if ((d1 <=> d2) > 0)
{
std::cout << "d1 > d2\n";
}
std::cout << std::boolalpha << (1d <= 1d) << ' ' << (1d != 2d) << ' ' << (2d > 3d);
return 0;
}
d1 < d2
true true false
operator<<
Выводит следующие типы в поток:
day
file_time
gps_time
hh_mm_ss
local_time
local_info
month
month_day
month_day_last
month_weekday
month_weekday_last
sys_info
tai_time
utc_time
weekday
weekday_indexed
weekday_last
year
year_month
year_month_day
year_month_day_last
year_month_weekday
year_month_weekday_last
zoned_time
// 1) day
template <class CharT, class Traits>
std::basic_ostream<CharT, Traits>&
operator<<(std::basic_ostream<CharT, Traits>& os, const day& d); // C++20
// 2) hh_mm_ss
template<class CharT, class traits, class Duration>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const hh_mm_ss<Duration>& hms); // C++20
// 3) month
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const month& m); // C++20
// 4) month_day
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const month_day& md); // C++20
// 5) month_day_last
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const month_day_last& mdl); // C++20
// 6) month_weekday
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const month_weekday& mwd); // C++20
// 7) month_weekday_last
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const month_weekday_last& mwdl); // C++20
// 8) weekday
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const weekday& wd); // C++20
// 9) weekday_indexed
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const weekday_indexed& wdi); // C++20
// 10) weekday_last
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const weekday_last& wdl); // C++20
// 11) year
template <class CharT, class Traits>
std::basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const year& y); // C++20
// 12) year_month
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const year_month& ym); // C++20
// 13) year_month_day
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const year_month_day& ymd); // C++20
// 14) year_month_day_last
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const year_month_day_last& ymdl); // C++20
// 15) year_month_weekday
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const year_month_weekday& ymwd); // C++20
// 16) year_month_weekday_last
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const year_month_weekday_last& ymwdl); // C++20
// 17) tai_time
template<class CharT, class Traits, class Duration>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const tai_time<Duration>& t); // C++20
// 18) utc_time
template<class CharT, class Traits, class Duration>
basic_ostream<CharT, traits>&
operator<<(basic_ostream<CharT, Traits>& os, const utc_time<Duration>& t); // C++20
// 19) gps_time
template<class CharT, class Traits, class Duration>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const gps_time<Duration>& t); // C++20
// 20) local_time
template<class CharT, class Traits, class Duration>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const local_time<Duration>& t); // C++20
// 21) sys_info
template<class CharT, class Traits>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const sys_info& si);
// 22) local_info
template<class CharT, class Traits>
basic_ostream<charT, traits>&
operator<<(basic_ostream<CharT, Traits>& os, const local_info& li);
// 23) zoned_time
template<class CharT, class Traits, class Duration, class TimeZonePtr>
basic_ostream<CharT, Traits>&
operator<<(basic_ostream<CharT, Traits>& os, const zoned_time<Duration, TimeZonePtr>& zt);
Параметры
CharT
Тип данных одного символа, считываемого из потока и хранящегося в строке. Стандартная библиотека C++ предоставляет специализации этого шаблона класса с определениями string
типов для элементов типаchar
, wstring
для , для , u16string
для wchar_t
char16_t
и u32string
для char32_t
.
Traits
CharT
Описывает атрибуты для basic_string
и basic_istream
специализации.
os
Выходной поток, в который будет выведено day
значение.
d
Выходные day
данные.
hms
Выходные hh_mm_ss
данные.
li
Выходные local_info
данные.
m
Выходные month
данные.
md
Выходные month_day
данные.
mdl
Выходные month_day_last
данные.
mwd
Выходные month_weekday
данные.
mwdl
Выходные month_weekday_last
данные.
si
Выходные sys_info
данные.
t
, или gps_time
tai_time
utc_time
выходные local_time
данные.
TimeZonePtr
Указатель на time_zone , хранящийся в элементе zoned_time
.
wd
Выходные weekday
данные.
wdi
Выходные weekday_indexed
данные.
wdl
Выходные weekday_last
данные.
y
Выходные year
данные.
ym
Выходные year_month
данные.
ymd
Выходные year_month_day
данные.
ymdl
Выходные year_month_day_last
данные.
ymwd
Выходные year_month_weekday
данные.
ymwdl
Выходные year_month_weekday_last
данные.
zt
Выходные zoned_time
данные.
Возвращаемое значение
Исходящий поток, который вы передали, os
Замечания
1) day
Значение выводится как десятичное число с начальным нулем, если результат будет одной цифрой. Если !d.ok()
значение "не является допустимым днем", добавляется к выходным данным.
2) Значение hh_mm_ss
выводится в виде часов:минут:секунд:тысячных секунд. Например, "00:00:05.721
"
3) Сокращенное имя месяца с использованием языкового стандарта, связанного с os
, является выходным. Например, Jan
. Если !m.ok()
, то " is not a valid month"
добавляется к выходным данным.
4) Сокращенное имя месяца с использованием языкового стандарта, связанного с os
датой, с начальным нулем, если результат будет одной цифрой, является выходным. Например, Jan/05
. Если !md.ok()
, то " is not a valid month"
может быть добавлено к выходным данным месяца и "is not a valid day"
может быть добавлено к выходным данным дня. Например, 204 is not a valid month/204 is not a valid day
.
5) Сокращенное имя месяца, используя языковой стандарт, связанный с os
, а затем /last
. Например, Jan/last
.
6) Сокращенное имя дня недели, используя языковой стандарт, связанный с os
, а затем nth weekday в месяце он представляет в скобках. Например, Mon[1]
.
7) Сокращенное имя дня недели, используя языковой стандарт, связанный с os
, за которым следует последний рабочий день месяца, который он представляет в скобках. Например, Jan/Mon[last]
.
8) Сокращенное имя дня недели с использованием языкового стандарта, связанного с os
, выводится. Если !wd.ok()
, то " is not a valid weekday"
добавляется к выходным данным.
9) Сокращенное имя дня недели, использующий языковой стандарт, связанный с os
, выводится, а затем будний день месяца в скобках. Например, Mon[3]
. Если !wd.ok()
, то " is not a valid weekday"
может быть добавлено в день выходных данных недели и "is not a valid index"
может быть добавлено к выходным данным индекса недели.
10) Последний рабочий день месяца, используя языковой стандарт, связанный с os
, выводится, за которым следует [last]
дата. Например, Tue[last] 2019-10-29
. Если !wd.ok()
, то " is not a valid weekday"
может быть добавлено в день выходных данных недели и "is not a valid index"
может быть добавлено к выходным данным индекса недели.
11) Год слева от 0 (ноль) до четырех цифр, если результат будет меньше этого. Если !y.ok()
, то " is not a valid year"
добавляется к выходным данным.
12) Выходные year_month
данные в форме гггг-мм-дд. Если ym.ok
возвращается false
, " is not a valid date"
добавляется.
13) Выходные year_month_day
данные в форме гггг-мм-дд. Если ymd.ok
возвращается false
, " is not a valid date"
добавляется.
14) Выходные year_month_day_last
данные в форме гггг/месяц/последний. Например, 2020/May/last
.
15) Выходные year_month_weekday
данные в форме yy/month/weekday[index]. Например: 1996/Jan/Wed[1]
16) Выходные year_month_weekday_last
данные в форме yy/month/weekday[last]. Например: 1996/Jan/Wed[last]
17) Выходные tai_time
данные в форме гггг-мм-дд чч:мм:ss.sss. Например: 2021-08-13 23:23:08.4358666
18) Выходные utc_time
данные в форме гггг-мм-дд чч:мм:ss.sssss. Например: 2021-08-13 23:23:08.4358666
19) Выходные gps_time
данные в форме гггг-мм-дд чч:мм:ss.sss. Например: 2021-08-13 23:23:08.4358666
20) Выходные local_time
данные в виде количества секунд с момента эпохи часов. Это выходные данные, как будто.os << std::chrono::sys_time<Duration>(some_local_time.time_since_epoch());
Например, если some_local_time
18 августа 2021 г. 3:13 вечера, выходные данные будут 1597792380
.
21) В реализации sys_info
Корпорации Майкрософт выходные данные в виде begin
его полей , end
и offset
save
abbrev
полей. Например: begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, offset: -25200s, save: 60min, abbrev: PDT
22) В реализации local_info
Корпорации Майкрософт выходные данные в виде гггг-мм-дд чч:мм::ss.ss. Например: 2021-09-17 13:55:59.6590120
23) Местное время в zoned_time
(полученном как zt.get_local_time()
) выводится с помощью часового пояса гггг-мм-дд чч:мм:сс. Например: 2021-09-15 10:45:00 GMT-6
Пример: operator<<
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
std::cout << utc_clock::now() << '\n';
year_month ym{ 2021y / April };
std::cout << ym;
return 0;
}
2021-08-16 20:47:05.6299822
2021/Apr
operator modulo
Оператор для операций duration
с модулем.
1)
template <class Rep1, class Period1, class Rep2>
constexpr duration<Rep1, Period1, Rep2>::type
operator%(
const duration<Rep1, Period1>& Dur,
const Rep2& Div);
2)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr typename common_type<duration<Rep1, _Period1>, duration<Rep2, Period2>>::type
operator%(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
Параметры
Dur
Объект duration
.
Div
Целочисленное значение.
Left
Делимое. Модуль является оставшимся после деления дивиденда делителем.
Right
duration
Правый объект, делитель.
Возвращаемое значение
1) Возвращает объект, длина интервала duration
которого является Dur
модулем Div
.
2) Возвращает значение, представляющее Left
модуло Right
.
operator/
для duration
Оператор деления для объектов duration
.
1)
template <class Rep1, class Period1, class Rep2>
constexpr duration<typename common_type<Rep1, Rep2>::type, Period1>
operator/(
const duration<Rep1, Period1>& Dur,
const Rep2& Div);
2)
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr typename common_type<Rep1, Rep2>::type
operator/(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
Параметры
Dur
Объект duration
.
Div
Целочисленное значение.
Left
\w Левый duration
объект.
Right
Правой объект duration
.
Возвращаемое значение
1) Объект длительности, длина интервала Dur
которого составляет длину, разделенную на значение Div
.
2) Соотношение длины интервала Left
и Right
.
Если is_convertible<Rep2, common_type<Rep1, Rep2>>
не имеет значения true и Rep2
не является экземпляром экземпляра duration
, первый оператор не участвует в разрешении перегрузки. Дополнительные сведения см. в type_traits><.
operator/
для дат календаря
Предоставляет синтаксис для создания дат календаря в следующих формах:
месяц/день/год
day/month/year
год/месяц/день
День можно заменить следующим:
last
weekday[n]
для n-го дня месяца
weekday[last]
за последний weekday
месяц.
Частичные даты можно сформировать следующим образом:
year_month ym = 2015y/April;
month_day md1 = April/4;
month_day md2 = 4d/April;
Целые числа можно использовать, если интерпретация не является неоднозначной.
///////// returns year_month
// 1
constexpr year_month
operator/(const year& y, const month& m) noexcept; // C++20
// 2
constexpr year_month
operator/(const year& y, int m) noexcept; // C++20
///////// returns month_day
// 3
constexpr month_day
operator/(const month& m, const day& d) noexcept; // C++20
// 4
constexpr month_day
operator/(const month& m, int d) noexcept; // C++20
// 5
constexpr month_day
operator/(int m, const day& d) noexcept; // C++20
// 6
constexpr month_day
operator/(const day& d, const month& m) noexcept; // C++20
// 7
constexpr month_day
operator/(const day& d, int m) noexcept; // C++20
///////// returns month_day_last
// 8
constexpr month_day_last
operator/(const month& m, last_spec) noexcept; // C++20
// 9
constexpr month_day_last
operator/(int m, last_spec) noexcept; // C++20
// 10
constexpr month_day_last
operator/(last_spec, const month& m) noexcept; // C++20
// 11
constexpr month_day_last
operator/(last_spec, int m) noexcept; // C++20
///////// returns month_weekday
// 12
constexpr month_weekday
operator/(const month& m, const weekday_indexed& wdi) noexcept; // C++20
// 13
constexpr month_weekday
operator/(int m, const weekday_indexed& wdi) noexcept; // C++20
// 14
constexpr month_weekday
operator/(const weekday_indexed& wdi, const month& m) noexcept; // C++20
// 15
constexpr month_weekday
operator/(const weekday_indexed& wdi, int m) noexcept; // C++20
///////// returns month_weekday_last
// 16
constexpr month_weekday_last
operator/(const month& m, const weekday_last& wdl) noexcept; // C++20
// 17
constexpr month_weekday_last
operator/(int m, const weekday_last& wdl) noexcept; // C++20
// 18
constexpr month_weekday_last
operator/(const weekday_last& wdl, const month& m) noexcept; // C++20
// 19
constexpr month_weekday_last
operator/(const weekday_last& wdl, int m) noexcept; // C++20
///////// returns year_month_day
// 20
constexpr year_month_day
operator/(const year_month& ym, const day& d) noexcept; // C++20
// 21
constexpr year_month_day
operator/(const year_month& ym, int d) noexcept; // C++20
// 22
constexpr year_month_day
operator/(const year& y, const month_day& md) noexcept; // C++20
// 23
constexpr year_month_day
operator/(int y, const month_day& md) noexcept; // C++20
// 24
constexpr year_month_day
operator/(const month_day& md, const year& y) noexcept; // C++20
// 25
constexpr year_month_day
operator/(const month_day& md, int y) noexcept; // C++20
///////// returns year_month_day_last
// 26
constexpr year_month_day_last
operator/(const year_month& ym, last_spec) noexcept; // C++20
// 27
constexpr year_month_day_last
operator/(const year& y, const month_day_last& mdl) noexcept; // C++20
// 28
constexpr year_month_day_last
operator/(int y, const month_day_last& mdl) noexcept; // C++20
// 29
constexpr year_month_day_last
operator/(const month_day_last& mdl, const year& y) noexcept; // C++20
// 30
constexpr year_month_day_last
operator/(const month_day_last& mdl, int y) noexcept; // C++20
///////// returns year_month_weekday
// 31
constexpr year_month_weekday
operator/(const year_month& ym, const weekday_indexed& wdi) noexcept; // C++20
// 32
constexpr year_month_weekday
operator/(const year& y, const month_weekday& mwd) noexcept; // C++20
// 33
constexpr year_month_weekday
operator/(int y, const month_weekday& mwd) noexcept; // C++20
// 34
constexpr year_month_weekday
operator/(const month_weekday& mwd, const year& y) noexcept; // C++20
// 35
constexpr year_month_weekday
operator/(const month_weekday& mwd, int y) noexcept; // C++20
///////// returns year_month_weekday_last
// 36
constexpr year_month_weekday_last
operator/(const year_month& ym, const weekday_last& wdl) noexcept; // C++20
// 37
constexpr year_month_weekday_last
operator/(const year& y, const month_weekday_last& mwdl) noexcept; // C++20
// 38
constexpr year_month_weekday_last
operator/(int y, const month_weekday_last& mwdl) noexcept; // C++20
// 39
constexpr year_month_weekday_last
operator/(const month_weekday_last& mwdl, const year& y) noexcept; // C++20
// 40
constexpr year_month_weekday_last
operator/(const month_weekday_last& mwdl, int y) noexcept; // C++20
Параметры
d
День. Предоставлено либо в виде целого числа в диапазоне [1,31], либо как целое day
число.
lastspec
Пустой тип тега, указывающий последний элемент в последовательности. Например, 2021y/May/last
это последний день мая 2021 года.
m
Месяц. Предоставляется либо как целое число в диапазоне [1,12], либо в виде month
.
md
Месяц и день.
mdl
Последний день указанного месяца.
mwd
N-й день недели указанного месяца.
mwdl
Последний рабочий день указанного месяца.
wdi
Индекс дня недели (weekday_indexed
). Например, weekday_indexed(Monday, 1)
это первый понедельник месяца.
wdl
Последний рабочий день месяца. Например, Monday[last]
это последний понедельник месяца.
y
Год. Предоставляется либо как целое число, либо как целое year
число.
ym
Год и месяц.
Возвращаемое значение
1) year_month(y, m)
2) year_month(y, month(m))
3) month_day(m, d)
4) month_day(m, day(d))
5) month_day(month(m), d)
6) month_day(m, d)
7) month_day(month(m), d)
8) month_day_last(m)
9) month_day_last(month(m))
10) month_day_last(m)
11) month_day_last(month(m))
12) month_weekday(m, wdi)
13) month_weekday(month(m), wdi)
14) month_weekday(m, wdi)
15) month_weekday(month(m), wdi)
16) month_weekday_last(m, wdl)
17) month_weekday_last(month(m), wdl)
18) month_weekday_last(m, wdl)
19) month_weekday_last(month(m), wdl)
20) year_month_day(ym.year(), ym.month(), d)
21) year_month_day(ym.year(), ym.month(), day(d))
22) year_month_day(y, md.month(), md.day())
23) year_month_day(year(y), md.month(), md.day())
24) year_month_day(y, md.month(), md.day())
25) year_month_day(year(y), md.month(), md.day())
26) year_month_day_last(ym.year(), month_day_last(ym.month()))
27) year_month_day_last(y, mdl)
28) year_month_day_last(year(y), mdl)
29) year_month_day_last(y, mdl)
30) year_month_day_last(year(y), mdl)
31) year_month_weekday(ym.year(), ym.month(), wdi)
32) year_month_weekday(y, mwd.month(), mwd.weekday_indexed())
33) year_month_weekday(year(y), mwd.month(), mwd.weekday_indexed())
34) year_month_weekday(y, mwd.month(), mwd.weekday_indexed())
35) year_month_weekday(year(y), mwd.month(), mwd.weekday_indexed())
36) year_month_weekday_last(ym.year(), ym.month(), wdl)
37) year_month_weekday_last(y, mwdl.month(), mwdl.weekday_last())
38) year_month_weekday_last(year(y), mwdl.month(), mwdl.weekday_last())
39) year_month_weekday_last(y, mwdl.month(), mwdl.weekday_last())
40) year_month_weekday_last(year(y), mwdl.month(), mwdl.weekday_last())
Пример: operator/
для дат календаря
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
month m{ July }; // Jul
month_day md{ April / 4 }; // Apr/04
month_day md2{ 4d / April }; // Apr/04
month_day_last mdl{ January / last }; // Jan/last
month_weekday mw{ 11 / Monday[1] }; // Nov/Mon[1]
month_weekday_last mwl{ January / Monday[last] }; // Jan/Mon[last]
weekday wd{ Monday }; // Mon
weekday_indexed wdi{ Monday, 1 }; // Mon[1]
year_month ym{ 2021y / April }; // 2021/Apr
year_month_day ymd{ January / 1d / 2021y }; // 2021-01-01
year_month_day ymd2{ 2021y / 5 / 7 }; // 2021-05-07
year_month_day_last ymdl{ April / last / 1975 }; // 1975/Apr/last
year_month_weekday ymw{ 1997y / January / Wednesday[1] }; // 1997/Jan/Wed[1]
year_month_weekday_last ymwl{ 1997y / January / Wednesday[last] }; // 1997/Jan/Wed[last]
int yearValue{ 2021 / 4 / 4 }; // 126
std::cout << m << '\n' << md << '\n' << md2 << '\n' << mdl << '\n' << mw
<< '\n' << mwl << '\n' << wd << '\n' << wdi << '\n'
<< ym << '\n' << ymd << '\n' << ymd2 << '\n' << ymdl
<< '\n' << ymw << '\n' << ymwl << '\n' << yearValue;
return 0;
}
Jul
Apr/04
Apr/04
Jan/last
Nov/Mon[1]
Jan/Mon[last]
Mon
Mon[1]
2021/Apr
2021-01-01
2021-05-07
1975/Apr/last
1997/Jan/Wed[1]
1997/Jan/Wed[last]
126