139 [[deprecated (
"Since Stroika v3.0d1, use chrono::January")]]
static constexpr chrono::month eJanuary{January};
140 [[deprecated (
"Since Stroika v3.0d1, use chrono::February")]]
static constexpr chrono::month eFebruary{February};
141 [[deprecated (
"Since Stroika v3.0d1, use chrono::March")]]
static constexpr chrono::month eMarch{March};
142 [[deprecated (
"Since Stroika v3.0d1, use chrono::April")]]
static constexpr chrono::month eApril{April};
143 [[deprecated (
"Since Stroika v3.0d1, use chrono::May")]]
static constexpr chrono::month eMay{May};
144 [[deprecated (
"Since Stroika v3.0d1, use chrono::June")]]
static constexpr chrono::month eJune{June};
145 [[deprecated (
"Since Stroika v3.0d1, use chrono::July")]]
static constexpr chrono::month eJuly{July};
146 [[deprecated (
"Since Stroika v3.0d1, use chrono::August")]]
static constexpr chrono::month eAugust{August};
147 [[deprecated (
"Since Stroika v3.0d1, use chrono::September")]]
static constexpr chrono::month eSeptember{September};
148 [[deprecated (
"Since Stroika v3.0d1, use chrono::October")]]
static constexpr chrono::month eOctober{October};
149 [[deprecated (
"Since Stroika v3.0d1, use chrono::November")]]
static constexpr chrono::month eNovember{November};
150 [[deprecated (
"Since Stroika v3.0d1, use chrono::December")]]
static constexpr chrono::month eDecember{December};
334 using JulianDayNumber = uint32_t;
352 JulianDayNumber fJulianRep;
376 static constexpr ReferencePoint kGregorianCalendarEpoch{1752y / September / 14d, 2361222};
384 static_assert (kMinDateReference.fYMD.year () == Year::eFirstYear);
393 constexpr static JulianDayNumber ToJulianRep (month m, day d, year y,
395 constexpr static JulianDayNumber
403 constexpr static year_month_day
413 static const JulianDayNumber kMinJulianRep = kMinDateReference.fJulianRep;
422 class FormatException;
436 constexpr Date (
const Date& src)
noexcept =
default;
437 explicit constexpr Date (JulianDayNumber julianRep,
445 nonvirtual
Date& operator= (
Date&& rhs)
noexcept =
default;
446 nonvirtual
Date& operator= (
const Date& rhs) =
default;
452 static Date Now () noexcept;
465 static constexpr string_view kISO8601Format = "%Y-%m-%d"sv;
471 static constexpr string_view kLocaleStandardFormat = "%x"sv;
477 static constexpr string_view kLocaleStandardAlternateFormat = "%Ex"sv;
487 static constexpr string_view kMonthDayYearFormat = "%m/%d/%Y"sv;
494 static const Traversal::Iterable<
String> kDefaultParseFormats;
511 static
Date Parse (const
String& rep, const locale& l = locale{});
514 static Date Parse (
const String& rep,
const locale& l,
size_t* consumedCharsInStringUpTo);
515 static Date Parse (
const String& rep,
const locale& l,
const String& formatPattern);
516 static Date Parse (
const String& rep,
const locale& l,
const String& formatPattern,
size_t* consumedCharsInStringUpTo);
520 static Date Parse (
const String& rep,
const String& formatPattern,
size_t* consumedCharsInStringUpTo);
528 static optional<Date> ParseQuietly (
const String& rep,
const String& formatPattern);
529 static optional<Date> ParseQuietly (
const String& rep,
const locale& l,
const String& formatPattern);
532 static optional<Date> ParseQuietly_ (
const wstring& rep,
const time_get<wchar_t>& tmget,
const String& formatPattern,
533 size_t* consumedCharsInStringUpTo);
553 nonvirtual
constexpr year GetYear ()
const;
558 nonvirtual
constexpr month GetMonth ()
const;
563 nonvirtual
constexpr day GetDayOfMonth ()
const;
568 nonvirtual weekday GetDayOfWeek ()
const;
574 nonvirtual
constexpr JulianDayNumber GetJulianRep ()
const;
588 eCurrentLocale_WithZerosStripped,
590 eDEFAULT = eCurrentLocale_WithZerosStripped,
596 static constexpr NonStandardPrintFormat eCurrentLocale_WithZerosStripped = NonStandardPrintFormat::eCurrentLocale_WithZerosStripped;
603 nonvirtual
String Format (NonStandardPrintFormat pf = NonStandardPrintFormat::eDEFAULT)
const;
604 nonvirtual
String Format (
const locale& l)
const;
605 nonvirtual
String Format (
const locale& l,
const String& formatPattern)
const;
606 nonvirtual
String Format (
const String& formatPattern)
const;
612 nonvirtual
String ToString ()
const;
627 nonvirtual [[nodiscard]]
Date Add (
int d)
const;
628 nonvirtual [[nodiscard]]
Date Add (days d)
const;
629 nonvirtual [[nodiscard]]
Date Add (
const Duration& d)
const;
636 static days Since (
Date dStart,
Date dEnd);
637 nonvirtual days Since ()
const;
645 nonvirtual days Difference (
const Date& rhs)
const;
658 nonvirtual
Date operator+ (
int daysOffset)
const;
659 nonvirtual
Date operator+ (days daysOffset)
const;
669 nonvirtual days operator- (
const Date& rhs)
const;
670 nonvirtual
Date operator- (
int daysOffset)
const;
671 nonvirtual
Date operator- (days daysOffset)
const;
677 constexpr strong_ordering operator<=> (
const Date& rhs)
const =
default;
687 template <
typename T>
688 nonvirtual T
As ()
const;
691 using JulianRepType [[deprecated (
"Since Stroika v3.0d1 - use JulianDayNumber")]] = JulianDayNumber;
692 using SignedJulianRepType [[deprecated (
"Since Stroika v3.0d1 - use SignedJulianDayNumber")]] =
SignedJulianDayNumber;
693 [[deprecated (
"Since Stroika v3.0d1 - use.Add () - now Date immutable")]]
Date& operator++ ()
698 [[deprecated (
"Since Stroika v3.0d1 - use.Add () - now Date immutable")]]
Date operator++ (
int)
702 [[deprecated (
"Since Stroika v3.0d1, use As<year_month_day> ()")]]
void mdy (month* m, day* d, year* y)
const
711 [[deprecated (
"Since Stroika v3.0d1 - use Add(days)")]] Date AddDays (SignedJulianDayNumber dayCount)
const
713 return Add (chrono::days{dayCount});
715 [[deprecated (
"Since Stroika 3.0d1 - use Since")]] JulianDayNumber DaysSince ()
const
717 return static_cast<JulianDayNumber
> (Since ().count ());
721 static optional<Date> LocaleFreeParseQuietly_kMonthDayYearFormat_ (
const wstring& rep,
size_t* consumedCharsInStringUpTo);
724 static constexpr int kTM_Year_RelativeToYear_{1900};
727 static Date AsDate_ (const ::tm& when);
730 year_month_day fRep_;
762 String GetFormattedAgeWithUnit (
const optional<Date>& birthDate,
const optional<Date>& deathDate = {},
bool abbrevUnit =
true);