std::chrono...ar_month_day(3)

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

πŸ’– NAME πŸ’–

okay bestie, welcome to the std::chrono...ar_month_day(3) page from the C++ Standard Libary. The NAME is std::chrono::year_month_day::year_month_day - std::chrono::year_month_day::year_month_day β€” yes, it's literally the constructor page and it said its own name twice. iconic behavior. This whole page is about std::chrono::year_month_day's constructors, no cap.


✨ Synopsis ✨

Here's the overload lineup, all since C++20:

(1) since C++20

year_month_day() = default;

(2) since C++20

constexpr year_month_day( const std::chrono::year& y,
                          const std::chrono::month& m,
                          const std::chrono::day& d ) noexcept;

(3) since C++20

constexpr year_month_day( const std::chrono::year_month_day_last& ymdl ) noexcept;

(4) since C++20

constexpr year_month_day( const std::chrono::sys_days& dp ) noexcept;

(5) since C++20

constexpr explicit year_month_day( const std::chrono::local_days& dp ) noexcept;

Constructs a year_month_day object. That's the whole job.

  1. Default constructor β€” leaves the date uninitialized. (bestie, it's giving "no thoughts, head empty" 😭)
  2. Constructs a year_month_day object that stores the year y, month m, and day d.
  3. Constructs a year_month_day object that stores the year ymdl.year(), month ymdl.month(), and day ymdl.day().
  4. Constructs a year_month_day object that represent the same date as the one represented by dp.
  5. Constructs a year_month_day object that represent the same date as the one represented by dp, as if by year_month_day(sys_days(dp.time_since_epoch())).

Constructors (3,4) define implicit conversions from std::chrono::year_month_day_last and std::chrono::sys_days, respectively.

For any year_month_day object ymd representing a valid date (ymd.ok() == true), converting ymd to sys_days and back yields the same value. Stable round-trip, slay.


🌸 Notes 🌸

A year_month_day can also be created by combining one of the partial-date types std::chrono::year_month and std::chrono::month_day with the missing component (day and year, respectively) using operator/. Cute.


πŸŽ€ Example πŸŽ€

// Run this code

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono;

    constexpr auto ymd2 = std::chrono::year_month_day(
        2020y, std::chrono::January, 31d // overload (2)
    );
    std::cout << "ymd2: " << ymd2 << '\n';

    constexpr auto ymd3 = std::chrono::year_month_day(
        std::chrono::April / std::chrono::Monday[last] / 2023y //
       overload (3)
    );
    std::cout << "ymd3: " << ymd3 << '\n';

    const auto now = std::chrono::system_clock::now();
    const auto ymd4 = std::chrono::year_month_day(
        std::chrono::floor<std::chrono::days>(now) // overload (4)
    );
    std::cout << "ymd4: " << ymd4 << '\n';
}

πŸ’€ Possible output: πŸ’€

ymd2: 2020-01-31
ymd3: 2023-04-24
ymd4: 2023-08-30

🌈 See also 🌈

  • operator/ β€” conventional syntax for Gregorian calendar date creation (C++20) (function)

okay bestie, that's the whole page πŸ’– β€” source/version: http://cppreference.com, date: 2024.06.10, manual: std::chrono...ar_month_day(3). periodt. 🫢

πŸ“¦ where this page comes from