std::chrono...day::weekday(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

std::chrono::weekday::weekday β€” literally std::chrono::weekday::weekday, bestie. This is the std::chrono...day::weekday(3) page from the C++ Standard Libary manual (yes, that exact spelling is on the page, don't come for me 😭).


✨ Synopsis ✨

weekday() = default;
(1) (since C++20)
constexpr explicit weekday( unsigned wd ) noexcept;
(2) (since C++20)
constexpr weekday( const std::chrono::sys_days& sd ) noexcept;
(3) (since C++20)
constexpr explicit weekday( const std::chrono::local_days& ld )
(4) (since C++20)
noexcept;

Okay so overload (4)'s declaration gets split around the (4) (since C++20) line in the original, so I kept that energy exact β€” no editing the source, periodt πŸ’….


πŸŽ€ Parameters πŸŽ€

  • wd β€” a weekday value.
  • sd β€” a system days object.
  • ld β€” a local days object.

πŸ¦‹ Description πŸ¦‹

These constructors do one main-character job: construct a weekday object.

  • (1) weekday() = default; β€” since C++20. The default constructor leaves the weekday value uninitialized. No cap, it just does not initialize it.
  • (2) constexpr explicit weekday( unsigned wd ) noexcept; β€” since C++20. Constructs a weekday object holding the weekday value wd. If wd == 7, the value held is 0. If wd > 255, the value held is unspecified.
  • (3) constexpr weekday( const std::chrono::sys_days& sd ) noexcept; β€” since C++20. Constructs a weekday object representing the day of the week sd corresponds to. This constructor defines an implicit conversion from std::chrono::sys_days to weekday.
  • (4) the const std::chrono::local_days& ld overload β€” since C++20. Constructs a weekday object representing the day of the week ld corresponds to, as if by weekday(std::chrono::sys_days(ld.time_since_epoch())).
🚨 Bestie, overload (1) leaves the weekday value uninitialized β€” that's the vibe check, and it is not giving initialized.

πŸ¦‹ Example πŸ¦‹

// Run this code

#include <chrono>
#include <iomanip>
#include <iostream>

int main()
{
    constexpr std::chrono::weekday friday{5}; // uses overload (2)
    static_assert(friday == std::chrono::Friday);

    for (int y{2020}; y <= 2023; ++y)
    {
        const std::chrono::year cur_year{y};
        for (int cur_month{1}; cur_month != 13; ++cur_month)
        {
            const std::chrono::year_month_day
            ymd{cur_year/cur_month/13};
            const std::chrono::weekday
            cur_weekday{std::chrono::sys_days(ymd)}; // (3)
            if (cur_weekday == friday)
                std::cout << ymd << " is " << friday << '\n';
        }
    }
}

🌈 Output 🌈

Output:

2020-03-13 is Fri
2020-11-13 is Fri
2021-08-13 is Fri
2022-05-13 is Fri
2023-01-13 is Fri
2023-10-13 is Fri

πŸ’– This cutie came from http://cppreference.com, dated 2024.06.10, and it's the std::chrono...day::weekday(3) page. Mwah! πŸ’–

πŸ“¦ where this page comes from