4#ifndef TETL_CHRONO_YEAR_MONTH_DAY_HPP
5#define TETL_CHRONO_YEAR_MONTH_DAY_HPP
7#include <etl/_chrono/day.hpp>
8#include <etl/_chrono/local_t.hpp>
9#include <etl/_chrono/month.hpp>
10#include <etl/_chrono/system_clock.hpp>
11#include <etl/_chrono/year.hpp>
12#include <etl/_chrono/year_month_day_last.hpp>
13#include <etl/_limits/numeric_limits.hpp>
27 int32_t
const era = (z >= 0 ? z : z - 146096) / 146097;
28 auto const doe =
static_cast<uint32_t>(z - (era * 146097));
29 uint32_t
const yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;
30 int32_t
const y =
static_cast<int32_t>(yoe) + (era * 400);
31 uint32_t
const doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
32 uint32_t
const mp = (5 * doy + 2) / 153;
33 uint32_t
const d = doy - ((153 * mp + 2) / 5) + 1;
34 uint32_t
const m = mp < 10 ? mp + 3 : mp - 9;
44 [[
nodiscard]]
static constexpr auto days_from_civil(int32_t y, uint32_t m, uint32_t d)
noexcept -> days
49 y -=
static_cast<int32_t>(m <= 2);
50 int32_t
const era = (y >= 0 ? y : y - 399) / 400;
51 auto const yoe =
static_cast<uint32_t>(y - (era * 400));
52 uint32_t
const doy = ((153 * (m > 2 ? m - 3 : m + 9) + 2) / 5) + d - 1;
53 uint32_t
const doe = (yoe * 365) + (yoe / 4) - (yoe / 100) + doy;
54 return days{(era * 146097) +
static_cast<int32_t>(doe) - 719468};
136 auto const ym = year_month{lhs.year(), lhs.month()} + rhs;
137 return {ym.year(), ym.month(), lhs
.day()};
196 return {ym.year(), ym.month(), d};
201 return {ym.year(), ym.month(),
day(static_cast<
unsigned>(d)
)};
206 return {y, md.month(), md.day()};
211 return {
year{y
}, md.month(), md.day()};
216 return {y, md.month(), md.day()};
221 return {
year{y
}, md.month(), md.day()};
constexpr auto operator/(int y, month_day const &md) noexcept -> year_month_day
Definition year_month_day.hpp:209
constexpr auto operator+(chrono::year_month_day const &lhs, chrono::years const &rhs) noexcept -> chrono::year_month_day
Definition year_month_day.hpp:146
constexpr auto operator/(month_day const &md, year const &y) noexcept -> year_month_day
Definition year_month_day.hpp:214
constexpr auto operator-(chrono::year_month_day const &lhs, chrono::years const &rhs) noexcept -> chrono::year_month_day
Definition year_month_day.hpp:164
constexpr auto operator/(year const &y, int m) noexcept -> year_month
Definition year_month.hpp:120
constexpr auto operator-(chrono::year_month_day const &lhs, chrono::months const &rhs) noexcept -> chrono::year_month_day
Definition year_month_day.hpp:158
constexpr auto operator+(chrono::year_month_day const &lhs, chrono::months const &rhs) noexcept -> chrono::year_month_day
Definition year_month_day.hpp:133
constexpr auto operator/(year const &y, month_day const &md) noexcept -> year_month_day
Definition year_month_day.hpp:204
constexpr auto operator+(chrono::months const &lhs, chrono::year_month_day const &rhs) noexcept -> chrono::year_month_day
Definition year_month_day.hpp:140
constexpr auto operator+(chrono::years const &lhs, chrono::year_month_day const &rhs) noexcept -> chrono::year_month_day
Definition year_month_day.hpp:152
constexpr auto operator==(month lhs, month rhs) noexcept -> bool
Definition month.hpp:53
constexpr auto operator==(year_month_day const &lhs, year_month_day const &rhs) noexcept -> bool
Definition year_month_day.hpp:128
constexpr auto operator/(year_month const &ym, day const &d) noexcept -> year_month_day
Definition year_month_day.hpp:194
constexpr auto operator+(year const &lhs, years const &rhs) noexcept -> year
Definition year.hpp:120
Definition adjacent_find.hpp:9
The class day represents a day in a month.
Definition day.hpp:21
friend constexpr auto operator==(day lhs, day rhs) noexcept -> bool
Definition day.hpp:76
friend constexpr auto operator>=(day lhs, day rhs) noexcept -> bool
Definition day.hpp:96
friend constexpr auto operator<=(day lhs, day rhs) noexcept -> bool
Definition day.hpp:86
constexpr day(unsigned d) noexcept
Definition day.hpp:24
constexpr auto count() const -> rep
Returns the number of ticks for this duration.
Definition duration.hpp:98
constexpr auto operator-() const -> etl::common_type_t< duration >
Implements unary plus and unary minus for the durations.
Definition duration.hpp:128
The class month represents a month in a year.
Definition month.hpp:22
constexpr auto ok() const noexcept -> bool
Definition month.hpp:31
constexpr month(unsigned m) noexcept
Definition month.hpp:25
constexpr auto time_since_epoch() const noexcept -> duration
Returns a duration representing the amount of time between *this and the clock's epoch.
Definition time_point.hpp:62
constexpr time_point(duration const &d) noexcept
Constructs a new time_point from one of several optional data sources. Constructs a time_point at Clo...
Definition time_point.hpp:44
Definition year_month_day_last.hpp:42
constexpr auto month() const noexcept -> chrono::month
Definition year_month_day_last.hpp:59
constexpr auto year() const noexcept -> chrono::year
Definition year_month_day_last.hpp:54
constexpr auto day() const noexcept -> chrono::day
Definition year_month_day_last.hpp:69
Definition year_month_day.hpp:18
constexpr year_month_day(chrono::year const &y, chrono::month const &m, chrono::day const &d) noexcept
Definition year_month_day.hpp:60
constexpr auto ok() const noexcept -> bool
Definition year_month_day.hpp:114
constexpr year_month_day(sys_days const &dp) noexcept
Definition year_month_day.hpp:74
constexpr auto month() const noexcept -> chrono::month
Definition year_month_day.hpp:94
constexpr year_month_day(local_days const &dp) noexcept
Definition year_month_day.hpp:79
constexpr auto operator+=(years const &y) noexcept -> year_month_day &
Definition year_month_day.hpp:182
constexpr year_month_day(year_month_day_last const &ymdl) noexcept
Definition year_month_day.hpp:67
constexpr auto year() const noexcept -> chrono::year
Definition year_month_day.hpp:89
constexpr auto operator+=(months const &m) noexcept -> year_month_day &
Definition year_month_day.hpp:170
constexpr auto operator-=(years const &y) noexcept -> year_month_day &
Definition year_month_day.hpp:188
constexpr auto operator-=(months const &m) noexcept -> year_month_day &
Definition year_month_day.hpp:176
constexpr operator sys_days() const noexcept
Definition year_month_day.hpp:104
constexpr auto day() const noexcept -> chrono::day
Definition year_month_day.hpp:99
constexpr auto ok() const noexcept -> bool
Definition year.hpp:76
constexpr year(int y) noexcept
Definition year.hpp:17
friend constexpr auto operator==(year lhs, year rhs) noexcept -> bool
Definition year.hpp:91
static constexpr int digits
Definition numeric_limits.hpp:616
static constexpr int digits
Definition numeric_limits.hpp:687
Definition numeric_limits.hpp:18