名前空間
変種
操作

std::chrono::year_month_day::operator sys_days, std::chrono::year_month_day::operator local_days

提供: cppreference.com
 
 
 
日付と時間のユーティリティ
(C++11)
(C++11)
時計
(C++20)
                                                  
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
カレンダー
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
タイムゾーン
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
C スタイルの日付と時間
 
 
constexpr operator std::chrono::sys_days() const noexcept;
(1) (C++20以上)
explicit constexpr operator std::chrono::local_days() const noexcept;
(2) (C++20以上)

*this を、この year_month_day と同じ日付を表す std::chrono::time_point に変換します。

1) ok() が true であれば、戻り値は std::chrono::system_clock のエポック (1970年1月1日) から *this までの日数を保持します。 *this がそれより前の日付を表している場合、結果は負になります。
そうでなく、格納されている年と月が有効 (year().ok() && month().ok()true) であれば、返される値は sys_days(year()/month()/1d) + (day() - 1d) です。
そうでなければ (year().ok() && month().ok()false の場合)、戻り値は未規定です。
[std::chrono::days{-12687428}, std::chrono::days{11248737}] の範囲内の sys_days は、 year_month_day に変換し戻した場合、同じ値を生成します。
2) (1) と同じですが、代わりに local_days を返します。 return local_days(sys_days(*this).time_since_epoch()); と同等です。

[編集] ノート

sys_days への変換とその逆変換は、年と月は有効だけれども無効な日を保持している year_month_day を正規化するために使用できます。

using namespace std::chrono;
auto ymd = 2017y/January/0;
ymd = sys_days{ymd};
// ymd is now 2016y/December/31

年と月の正規化はゼロの std::chrono::months を加算 (または減算) することによって行えます。

using namespace std::chrono;
constexpr year_month_day normalize(year_month_day ymd){
    ymd += months{0}; // normalizes year and month
    return sys_days{ymd}; // normalizes day
}
static_assert(normalize(2017y/33/59) == 2019y/10/29);

[編集]