std::chrono::year_month_day:: operator sys_days, std::chrono::year_month_day:: operator local_days
|
constexpr
operator
std::
chrono
::
sys_days
(
)
const
noexcept
;
|
(1) | (depuis C++20) |
|
constexpr
explicit
operator
std::
chrono
::
local_days
(
)
const
noexcept
;
|
(2) | (depuis C++20) |
Convertit
*
this
en un
std::chrono::time_point
représentant la même date que ce
year_month_day
.
year_month_day
et reconverti, donne la même valeur.
Notes
La conversion vers
std::chrono::sys_days
et inversement peut être utilisée pour normaliser un
year_month_day
qui contient un jour invalide mais une année et un mois valides :
using namespace std::chrono; auto ymd = 2017y/January/0; ymd = sys_days{ymd}; // ymd est maintenant 2016y/December/31
La normalisation de l'année et du mois peut être effectuée en ajoutant (ou en soustrayant) zéro std::chrono::months :
using namespace std::chrono; constexpr year_month_day normalize(year_month_day ymd) { ymd += months{0}; // normalise l'année et le mois return sys_days{ymd}; // normalise le jour } static_assert(normalize(2017y/33/59) == 2019y/10/29);
Exemple
#include <chrono> #include <iostream> int main() { using namespace std::chrono; const auto today = sys_days{std::chrono::floor<days>(system_clock::now())}; for (const year_month_day ymd : {{November/15/2020}, {November/15/2120}, today}) { std::cout << ymd; const auto delta = (sys_days{ymd} - today).count(); (delta < 0) ? std::cout << " was " << -delta << " day(s) ago\n" : (delta > 0) ? std::cout << " is " << delta << " day(s) from now\n" : std::cout << " is today!\n"; } }
Sortie possible :
2020-11-15 was 1014 day(s) ago 2120-11-15 is 35510 day(s) from now 2023-08-26 is today!