C++ 如何用当前年份填充chrono::year?

C++ 如何用当前年份填充chrono::year?,c++,date,epoch,chrono,c++20,C++,Date,Epoch,Chrono,C++20,所以我知道,在a的构造中使用的整数对应于原点0 所以我的问题是,如果我想得到当前的chrono::year,该怎么办。有这样的功能吗?我显然可以做到: const auto time = std::time(nullptr); const auto current_date = *std::gmtime(&time); const chrono::year foo{ current_date.tm_year + 1900 }; 但这似乎是一个相当复杂的过程。有更好的吗?使用名称空间st

所以我知道,在a的构造中使用的整数对应于原点0

所以我的问题是,如果我想得到当前的
chrono::year
,该怎么办。有这样的功能吗?我显然可以做到:

const auto time = std::time(nullptr);
const auto current_date = *std::gmtime(&time);
const chrono::year foo{ current_date.tm_year + 1900 };
但这似乎是一个相当复杂的过程。有更好的吗?

使用名称空间std::chrono;
using namespace std::chrono;
year_month_day ymd = floor<days>(system_clock::now());
const year foo = ymd.year();
年、月、日ymd=楼层(系统时钟::现在(); 常量年份foo=ymd.year();
还有另一种方法:

auto now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
struct tm *parts = std::localtime(&now_c);
std::cout << 1900 + parts->tm_year  << std::endl;
auto now=std::chrono::system_clock::now();
std::time\u t now\u c=std::chrono::system\u clock::to\u time\u t(now);
struct tm*parts=std::localtime(&now_c);

哇,真聪明。我喜欢摆脱C的时间库中所有指针传递的想法。Fwiw,我对这个答案投了赞成票。但我还想澄清,这是UTC的本年度。如果您希望当前年份位于特定时区,则可以使用
chrono::zoned_time
(有时会给出不同的答案)。执行此操作的代码本质上是此答案中显示的代码的超集。什么类型的cast允许
年\月\日ymd=floor(system\u clock::now())
?我没有看到
time\u point
year\u mont\u day
year\u month\u day
之间的转换有一个隐式的
constexpr noexcept
构造函数,它使用单个参数
const sys\u days&
sys\u days
只是时间点的类型别名<代码>楼层(…)
系统时钟::时间点
转换为
系统天数