std::chrono::operator/(日历)

来自cppreference.com
< cpp‎ | chrono
 
 
 
在标头 <chrono> 定义
year_month
constexpr auto operator/( const std::chrono::year& y,

                          const std::chrono::month& m ) noexcept

    -> std::chrono::year_month;
(1)(C++20 起)
constexpr auto operator/( const std::chrono::year& y, int m ) noexcept
    -> std::chrono::year_month;
(2)(C++20 起)
month_day
constexpr auto operator/( const std::chrono::month& m,

                          const std::chrono::day& d ) noexcept

    -> std::chrono::month_day;
(3)(C++20 起)
constexpr auto operator/( const std::chrono::month& m, int d ) noexcept
    -> std::chrono::month_day;
(4)(C++20 起)
constexpr auto operator/( int m, const std::chrono::day& d ) noexcept
    -> std::chrono::month_day;
(5)(C++20 起)
constexpr auto operator/( const std::chrono::day& d,

                          const std::chrono::month& m ) noexcept

   -> std::chrono::month_day;
(6)(C++20 起)
constexpr auto operator/( const std::chrono::day& d, int m ) noexcept
    -> std::chrono::month_day;
(7)(C++20 起)
month_day_last
constexpr auto operator/( const std::chrono::month& m,

                         std::chrono::last_spec ) noexcept

    -> std::chrono::month_day_last;
(8)(C++20 起)
constexpr auto operator/( int m, std::chrono::last_spec ) noexcept
    -> std::chrono::month_day_last;
(9)(C++20 起)
constexpr auto operator/( std::chrono::last_spec,

                          const std::chrono::month& m ) noexcept

    -> std::chrono::month_day_last;
(10)(C++20 起)
constexpr auto operator/( std::chrono::last_spec, int m ) noexcept
    -> std::chrono::month_day_last;
(11)(C++20 起)
month_weekday
constexpr auto operator/( const std::chrono::month& m,

                          const std::chrono::weekday_indexed& wdi ) noexcept

    -> std::chrono::month_weekday;
(12)(C++20 起)
constexpr auto operator/( int m, const std::chrono::weekday_indexed& wdi ) noexcept
    -> std::chrono::month_weekday;
(13)(C++20 起)
constexpr auto operator/( const std::chrono::weekday_indexed& wdi,

                          const std::chrono::month& m ) noexcept

    -> std::chrono::month_weekday;
(14)(C++20 起)
constexpr auto operator/( const std::chrono::weekday_indexed& wdi, int m ) noexcept
    -> std::chrono::month_weekday;
(15)(C++20 起)
month_weekday_last
constexpr auto operator/( const std::chrono::month& m,

                          const std::chrono::weekday_last& wdl ) noexcept

    -> std::chrono::month_weekday_last;
(16)(C++20 起)
constexpr auto operator/( int m, const std::chrono::weekday_last& wdl ) noexcept
    -> std::chrono::month_weekday_last;
(17)(C++20 起)
constexpr auto operator/( const std::chrono::weekday_last& wdl,

                          const std::chrono::month& m ) noexcept

    -> std::chrono::month_weekday_last;
(18)(C++20 起)
constexpr auto operator/( const std::chrono::weekday_last& wdl, int m ) noexcept
    -> std::chrono::month_weekday_last;
(19)(C++20 起)
year_month_day
constexpr auto operator/( const std::chrono::year_month& ym,

                          const std::chrono::day& d ) noexcept

    -> std::chrono::year_month_day;
(20)(C++20 起)
constexpr auto operator/( const std::chrono::year_month& ym, int d ) noexcept
    -> std::chrono::year_month_day;
(21)(C++20 起)
constexpr auto operator/( const std::chrono::year& y,

                          const std::chrono::month_day& md ) noexcept

    -> std::chrono::year_month_day;
(22)(C++20 起)
constexpr auto operator/( int y, const std::chrono::month_day& md ) noexcept
    -> std::chrono::year_month_day;
(23)(C++20 起)
constexpr auto operator/( const std::chrono::month_day& md,

                          const std::chrono::year& y ) noexcept

    -> std::chrono::year_month_day;
(24)(C++20 起)
constexpr auto operator/( const std::chrono::month_day& md, int y ) noexcept
    -> std::chrono::year_month_day;
(25)(C++20 起)
year_month_day_last
constexpr auto operator/( const std::chrono::year_month& ym,

                         std::chrono::last_spec ) noexcept

    -> std::chrono::year_month_day_last;
(26)(C++20 起)
constexpr auto operator/( const std::chrono::year& y,

                          const std::chrono::month_day_last& mdl ) noexcept

    -> std::chrono::year_month_day_last;
(27)(C++20 起)
constexpr auto operator/( int y, const std::chrono::month_day_last& mdl ) noexcept
    -> std::chrono::year_month_day_last;
(28)(C++20 起)
constexpr auto operator/( const std::chrono::month_day_last& mdl,

                          const std::chrono::year& y ) noexcept

    -> std::chrono::year_month_day_last;
(29)(C++20 起)
constexpr auto operator/( const std::chrono::month_day_last& mdl, int y ) noexcept
    -> std::chrono::year_month_day_last;
(30)(C++20 起)
year_month_weekday
constexpr auto operator/( const std::chrono::year_month& ym,

                          const std::chrono::weekday_indexed& wdi ) noexcept

    -> std::chrono::year_month_weekday;
(31)(C++20 起)
constexpr auto operator/( const std::chrono::year& y,

                          const std::chrono::month_weekday& mwd ) noexcept

    -> std::chrono::year_month_weekday;
(32)(C++20 起)
constexpr auto operator/( int y, const std::chrono::month_weekday& mwd ) noexcept
    -> std::chrono::year_month_weekday;
(33)(C++20 起)
constexpr auto operator/( const std::chrono::month_weekday& mwd,

                          const std::chrono::year& y ) noexcept

    -> std::chrono::year_month_weekday;
(34)(C++20 起)
constexpr auto operator/( const std::chrono::month_weekday& mwd, int y ) noexcept
    -> std::chrono::year_month_weekday;
(35)(C++20 起)
year_month_weekday_last
constexpr auto operator/( const std::chrono::year_month& ym,

                          const std::chrono::weekday_last& wdl ) noexcept

    -> std::chrono::year_month_weekday_last;
(36)(C++20 起)
constexpr auto operator/( const std::chrono::year& y,

                          const std::chrono::month_weekday_last& mwdl ) noexcept

    -> std::chrono::year_month_weekday_last;
(37)(C++20 起)
constexpr auto operator/( int y, const std::chrono::month_weekday_last& mwdl ) noexcept
    -> std::chrono::year_month_weekday_last;
(38)(C++20 起)
constexpr auto operator/( const std::chrono::month_weekday_last& mwdl,

                          const std::chrono::year& y ) noexcept

    -> std::chrono::year_month_weekday_last;
(39)(C++20 起)
constexpr auto operator/( const std::chrono::month_weekday_last& mwdl, int y ) noexcept
    -> std::chrono::year_month_weekday_last;
(40)(C++20 起)

这些 operator/ 为创建外推格里高利历日期提供约定语法。

对于创建完整日期,任何下列三种顺序都可接受:

  • year/month/day
  • month/day/year
  • day/month/year

每种情况中,能以下列之一替换 day

  • std::chrono::last,用于月的最后一日;
  • weekday[i],用于月的第 iweekday
  • weekday[std::chrono::last],用于该月的最后一个 weekday

若单纯的整数的含义相对于其他运算数的类型无歧义,则可接受它:允许 2005y/4/5,但不允许 5/April/2005

可以不应用三种顺序之一的第二个 operator/,以创建部分日期类型(year_monthmonth_day 等)。

返回值

20)std::chrono::year_month_day(ym.year(), ym.month(), d)
21)std::chrono::year_month_day(ym.year(), ym.month(), std::chrono::day(d))
22,24)std::chrono::year_month_day(y, md.month(), md.day())
23,25)std::chrono::year_month_day(std::chrono::year(y), md.month(), md.day())
31)std::chrono::year_month_weekday(ym.year(), ym.month(), wdi)
32,34)std::chrono::year_month_weekday(y, mwd.month(), mwd.weekday_indexed())
33,35)std::chrono::year_month_weekday(std::chrono::year(y), mwd.month(), mwd.weekday_indexed())
36)std::chrono::year_month_weekday_last(ym.year(), ym.month(), wdl)
37,39)std::chrono::year_month_weekday_last(y, mwdl.month(), mwdl.weekday_last())
38,40)std::chrono::year_month_weekday_last(std::chrono::year(y), mwdl.month(), mwdl.weekday_last())

示例

#include <chrono>
using namespace std::chrono;
 
constexpr auto ym{2021y/8};
static_assert(ym == year_month(year(2021), August));
 
constexpr auto md{9/15d};
static_assert(md == month_day(September, day(15)));
 
constexpr auto mdl{October/last};
static_assert(mdl == month_day_last(month(10)));
 
constexpr auto mw{11/Monday[3]};
static_assert(mw == month_weekday(November, Monday[3]));
 
constexpr auto mwdl{December/Sunday[last]};
static_assert(mwdl == month_weekday_last(month(12), weekday_last(Sunday)));
 
// 这个世界内外人们实际使用的三种年/月/日顺序:
constexpr auto ymd{year(2021)/January/day(23)};
static_assert(ymd == month{1}/23/2021);
static_assert(ymd == day{23}/1/2021);
static_assert(ymd == year_month_day(2021y, month(January), 23d));
 
int main() {}