std::chrono::year_month_day:: operator sys_days, std::chrono::year_month_day:: operator local_days
From cppreference.net
<
cpp
|
chrono
|
year month day
|
constexpr
operator
std::
chrono
::
sys_days
(
)
const
noexcept
;
|
(1) | (C++20 이후) |
|
constexpr
explicit
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-01-01)부터
*
this
까지의 일 수를 보유합니다.
*
this
가 해당 날짜 이전을 나타내는 경우 결과는 음수입니다.
그렇지 않고 저장된 연도와 월이 유효한 경우 (
year
(
)
.
ok
(
)
&&
month
(
)
.
ok
(
)
가
true
인 경우), 반환되는 값은
sys_days
(
year
(
)
/
month
(
)
/
1d
)
+
(
day
(
)
-
1d
)
입니다.
그렇지 않으면 (
year
(
)
.
ok
(
)
&&
month
(
)
.
ok
(
)
가
false
인 경우), 반환값은 지정되지 않습니다.
범위
std::chrono::sys_days
내의 값이
[
std::
chrono
::
days
{
-
12687428
}
,
std::
chrono
::
days
{
11248737
}
]
에 속하는
std::chrono::sys_days
를
year_month_day
로 변환하고 다시 되돌릴 때 동일한 값을 산출합니다.
2)
(1)
과 동일하지만
local_days
를 반환합니다. 다음 코드와 동등합니다:
return
local_days
(
sys_days
(
*
this
)
.
time_since_epoch
(
)
)
;
.
참고 사항
std::chrono::sys_days
로 변환하고 다시 되돌리는 것은 유효하지 않은 날짜를 포함하지만 유효한 연도와 월을 가진
year_month_day
를 정규화하는 데 사용될 수 있습니다:
using namespace std::chrono; auto ymd = 2017y/January/0; ymd = sys_days{ymd}; // ymd는 이제 2016y/December/31입니다
연도와 월을 정규화하는 것은 0개의 std::chrono::months 를 더하거나(빼거나) 함으로써 수행할 수 있습니다:
using namespace std::chrono; constexpr year_month_day normalize(year_month_day ymd) { ymd += months{0}; // 연도와 월을 정규화 return sys_days{ymd}; // 일을 정규화 } static_assert(normalize(2017y/33/59) == 2019y/10/29);
예제
이 코드 실행
#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"; } }
가능한 출력:
2020-11-15 was 1014 day(s) ago 2120-11-15 is 35510 day(s) from now 2023-08-26 is today!