GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::chrono::year_month_day::operatorsys_days,std::chrono::year_month_day::operator(3) C++ Standard Libary std::chrono::year_month_day::operatorsys_days,std::chrono::year_month_day::operator(3)

std::chrono::year_month_day::operatorsys_days,std::chrono::year_month_day::operator - std::chrono::year_month_day::operatorsys_days,std::chrono::year_month_day::operator


constexpr operator std::chrono::sys_days() const noexcept; (1) (since C++20)
explicit constexpr operator std::chrono::local_days() const (2) (since C++20)
noexcept;


Converts *this to a std::chrono::time_point representing the same date as this
year_month_day.


1) If ok() is true, the return value holds a count of days from the
std::chrono::system_clock epoch (1970-01-01) to *this. The result is negative if
*this represent a date prior to it.
Otherwise, if the stored year and month are valid (year().ok() && month().ok() is
true), then the returned value is sys_days(year()/month()/1d) + (day() - 1d).
Otherwise (if year().ok() && month().ok() is false), the return value is
unspecified.
A std::chrono::sys_days in the range [std::chrono::days{-12687428},
std::chrono::days{11248737}], when converted to year_month_day and back, yields the
same value.
2) Same as (1) but returns local_days instead. Equivalent to return
local_days(sys_days(*this).time_since_epoch());.


Converting to std::chrono::sys_days and back can be used to normalize a
year_month_day that contains an invalid day but a valid year and month:


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


Normalizing the year and month can be done by adding (or subtracting) zero
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);

// Run this code


#include <iostream>
#include <iomanip>
#include <chrono>


void print(std::chrono::year_month_day const ymd) {
// std::cout << ymd; // when C++20 stream operator<< ready, or:
std::cout << static_cast<int>(ymd.year()) << '/'
<< std::setw(2) << std::setfill('0')
<< static_cast<unsigned>(ymd.month()) << '/'
<< std::setw(2) << static_cast<unsigned>(ymd.day());
}


int main()
{
using namespace std::chrono;
const auto today = sys_days{floor<days>(system_clock::now())};
for (const year_month_day ymd : { {November/15/2020}, {November/15/2120}, today }) {
print(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 290 day(s) ago
2120/11/15 is 36234 day(s) from now
2021/09/01 is today!

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.